2016-05-29 6 views
2

Я недавно использовал регулярные выражения в программе. В этой программе я использовал их для поиска слов в списке слов, которые соответствовали определенному RE. Однако, когда я попробовал обратную привязку к этой программе, я получил интересный результат.Regex backreference findall not working

Вот код:

import re 
pattern = re.compile(r"[abcgr]([a-z])\1[ldc]") 
string = "reel reed have that with this they" 
print(re.findall(pattern, string)) 

Что я ожидал, был результатом ["reel","reed"] (регулярное выражение соответствует их, когда я использовал его с Pythex)

Однако, когда я побежал код с помощью питона (I использовать 3.5.1) я получил следующий результат:

['e','e']

Пожалуйста, может кто-то с более experien ce с REs объясняют, почему я получаю эту проблему и что могу сделать, чтобы ее решить.

спасибо.

+0

pythex дал тот же результат ... '' é' и é' .... –

+0

@ TadhgMcDonald-Jensen Извините, я имел в виду, что, когда я просто пытался сопоставить регулярное выражение с «reel» и «reed», я не пытался использовать findall в Pythex. –

+0

Возможный дубликат - http://stackoverflow.com/questions/8110059/python-regex-search-and-findall – SilentMonk

ответ

2

re.findall только возвращает зафиксированные значения, полученные с помощью групп захвата внутри шаблона регулярного выражения.

Использование re.finditer, которые будут держать группу нулевого (весь матч):

import re 
p = re.compile(r'[abcgr]([a-z])\1[ldc]') 
s = "reel reed have that with this they" 
print([x.group(0) for x in p.finditer(s)]) 

См IDEONE demo

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

  • Нет связанных вопросов^_^