2013-08-22 5 views

ответ

3
import re 
s = 'A Dirty Shame (2004)' 
pattern = r'(?P<year>\d{4})' 
r = re.search(pattern, s) 
n = int(r.group('year')) 

только ищет 4 значные номера. Преобразует строку в целое.

+0

+1 для именованной группы. Что должно произойти после 9999 года? –

+0

Что произойдет после 9999 года? 0000? – LarsVegas

+0

r не будет работать в последней строке, если вы не измените вторую на последнюю строку на r = re.search (pattern, s) – foosion

1
import re 
re.findall('\d+', 'A Dirty Shame (2004)') 
+0

что, если существует такое число в начале имени – erogol

0

Найти все внутри скобок:

import re 
re.findall('\((.*)\)', 'A Dirty Shame (2004)')[0] 

Это регулярное выражение будет продолжать работать, если название также включает в себя цифры например, «Назад в будущее 3 (1986)»)

1

Вы можете используйте следующее:

import re 
number = int(re.findall('(?<=\()\d+(?=\))', 'A Dirty Shame (2004)')[0]); 

Или вы можете использовать следующее, которое найдет все цифры между круглыми скобками где они находятся в строке без использования регулярных выражений:

[int(s.strip('()')) for s in s.split() if s.strip('()').isdigit()] 
0

Вы можете использовать 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.

1

Другой ответ, но без использования регулярных выражений (так как они, как правило, медленно):

Я хотел бы использовать разделительную 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' 

Имейте в виду, что это не будет работать, если какие-либо другие скобки существующие в строке

Смежные вопросы