в строковых случаях, как:Как я могу извлечь это число из строки?
A Dirty Shame (2004)
У меня есть дата в конце. Я хотел бы извлечь эту дату как число в другую переменную. Как я могу решить это в python?
Там же может быть номер!
в строковых случаях, как:Как я могу извлечь это число из строки?
A Dirty Shame (2004)
У меня есть дата в конце. Я хотел бы извлечь эту дату как число в другую переменную. Как я могу решить это в python?
Там же может быть номер!
import re
s = 'A Dirty Shame (2004)'
pattern = r'(?P<year>\d{4})'
r = re.search(pattern, s)
n = int(r.group('year'))
только ищет 4 значные номера. Преобразует строку в целое.
import re
re.findall('\d+', 'A Dirty Shame (2004)')
что, если существует такое число в начале имени – erogol
Найти все внутри скобок:
import re
re.findall('\((.*)\)', 'A Dirty Shame (2004)')[0]
Это регулярное выражение будет продолжать работать, если название также включает в себя цифры например, «Назад в будущее 3 (1986)»)
Вы можете используйте следующее:
import re
number = int(re.findall('(?<=\()\d+(?=\))', 'A Dirty Shame (2004)')[0]);
Или вы можете использовать следующее, которое найдет все цифры между круглыми скобками где они находятся в строке без использования регулярных выражений:
[int(s.strip('()')) for s in s.split() if s.strip('()').isdigit()]
Вы можете использовать re.search
:
>>> import re
>>> s = "A Dirty Shame (2004)"
>>> myresult = int(re.search(r'\((.*?)\)', s).group(1))
>>> print myresult
2004
.*?
захватывает все элементы внутри смежных лексем. В этом случае он получает все между круглыми скобками. \(
соответствует первой открытой скобке. Мы должны избегать этого (помещая обратную косую черту), потому что в скобках уже есть что-то еще в regex - токен группировки, который мы используем, чтобы получить все между скобками. Затем мы делаем противоположное с другой стороны.
re.search()
возвращает совпадение, если регулярное выражение соответствует чему-либо в строке. Как это было сделано так, мы называем .group(1)
на конце, чтобы получить год, 2004
Наконец, мы прилагаем int()
вокруг него, чтобы преобразовать строку "2004"
в целое 2004
.
Другой ответ, но без использования регулярных выражений (так как они, как правило, медленно):
Я хотел бы использовать разделительную FUNKTION из строки, которая расщепляет строку на разделитель (http://docs.python.org/2/library/string.html#string.split), как вы получили две отличительные сепаратора обеспечивают («(» и «)»)
>>> import string
>>> A = "A Dirty Shame (2004)"
>>> B = A.split('(')[1].split(')')[0]
>>> B
'2004'
Имейте в виду, что это не будет работать, если какие-либо другие скобки существующие в строке
+1 для именованной группы. Что должно произойти после 9999 года? –
Что произойдет после 9999 года? 0000? – LarsVegas
r не будет работать в последней строке, если вы не измените вторую на последнюю строку на r = re.search (pattern, s) – foosion