2013-04-25 6 views
7

У меня есть объект соответствия регулярного выражения в Python. Я хочу получить текст, который он согласовал. Скажем, если шаблон '1.3', а строка поиска - 'abc123xyz', я хочу получить '123'. Как я могу это сделать?Python: Получение текста регулярного выражения

Я знаю, что могу использовать match.string[match.start():match.end()], но я считаю, что это довольно громоздкий (и в некоторых случаях расточительный) для такого базового запроса.

Есть ли более простой способ?

+0

[ 're.finditer() '] (http://docs.python.org/2/library/re.html) – Elazar

+1

@ Элазар, судя по этому вопросу, ОП знает, как получить' MatchObject', но не как легко получить их содержимое. –

ответ

7

Вы можете просто использовать group функцию объекта Спичечного, как:

match = re.search(r"1.3", "abc123xyz") 
if match: 
    doSomethingWith(match.group(0)) 

получить весь матч. РЕДАКТИРОВАТЬ: как thg435 указывает, вы также можете опустить 0 и просто позвонить match.group().

Addtional note: если ваш шаблон содержит круглые скобки, вы можете получить эти подметки, пройдя 1, 2 и так далее до group().

+0

Неудивительно, на мой взгляд ... Но я думаю, это лучшее, что предоставляет Python. –

+0

@RamRachum Я не думаю, что это слишком странно. Когда вы выполняете регулярные выражения, вы ссылаетесь на группы захвата с '\ 1',' \ 2' и т. Д. (Или '$ 1',' $ 2', в зависимости от реализации), и весь матч часто упоминается с помощью ' \ 0' (или '$ 0'). Таким образом, это согласуется с нумерацией групп. –

+1

Вы можете опустить '0', просто' match.group() '. – georg

-1

Вы должны поставить регулярное выражение внутри "()", чтобы быть в состоянии получить ту часть

>>> var = 'abc123xyz' 
>>> exp = re.compile(".*(1.3).*") 
>>> exp.match(var) 
<_sre.SRE_Match object at 0x691738> 
>>> exp.match(var).groups() 
('123',) 
>>> exp.match(var).group(0) 
'abc123xyz' 
>>> exp.match(var).group(1) 
'123' 

или иначе это не будет ничего возвращать:

>>> var = 'abc123xyz' 
>>> exp = re.compile("1.3") 
>>> print exp.match(var) 
None 
+1

Я не думаю, что использование '. * (...). *' Для подстрочных совпадений - хорошая практика. Просто используйте 'search' вместо' match', и он делает все за вас. Фактически, он даже превосходит, поскольку вы не сможете получить несколько совпадений с 'match' (вместо этого он вернет последний, что также довольно интуитивно, в отличие от первого). –

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