2014-09-27 2 views
0

Я пытаюсь получить первую пару чисел от " _135624.jpg"Изменить регулярное выражение

Мой код теперь:

import re 

string = "09_135624.jpg" 
pattern = r"(?P<pair>(.*))_135624.jpg" 
match = re.findall(pattern, string) 

print match 

Выход:

[('09', '09')] 

Почему я есть кортеж в выходе?

Можете ли вы помочь мне изменить мой код, чтобы получить это:

['09'] 

Или:

'09' 

ответ

1

re.findall возвращается по-разному в зависимости от количества захвата группы в схеме:

>>> re.findall(r"(?P<pair>.*)_135624\.jpg", "09_135624.jpg") 
['09'] 

Согласно документации:

возвращенной все неперекрывающиеся матчи рисунка в string, в виде списка строк . Строка сканируется слева направо, и в ней возвращаются . Если одна или несколько групп присутствуют в шаблоне, возвращает список групп; это будет список кортежей, если шаблон имеет несколько групп. Пустые совпадения включены в результат , если они не касаются начала другого матча.


Альтернатива использованием re.search:

>>> re.search(r"(?P<pair>.*)_135624\.jpg", "09_135624.jpg") 
<_sre.SRE_Match object at 0x00000000025D0D50> 
>>> re.search(r"(?P<pair>.*)_135624\.jpg", "09_135624.jpg").group('pair') 
'09' 
>>> re.search(r"(?P<pair>.*)_135624\.jpg", "09_135624.jpg").group(1) 
'09' 

UPDATE

Чтобы соответствовать . буквально, что вам нужно, чтобы избежать его: \..

+0

Спасибо. Мой шаблон теперь «(? P ([0-9] [0-9])):? (. *). Jpg", и я использовал re.search для принятия необходимой группы. Vks помог мне с демо, вы помогли с ответом о re.search, поэтому я не знаю, какой ответ я могу принять ... –

+0

@ValeriyG, вы можете использовать '\ d' вместо' [0-9] '. – falsetru

+0

@ValeriyG 'r '(? P \ d {2}) _ \ d {6} \. Jpg'' – Unihedron

1
(?P<pair>(?:.*))_135624.jpg 

Попробуйте this.You получают два результата сог вы захватив их twice.I изменили его, чтобы захватить только один раз.

http://regex101.com/r/lS5tT3/62

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