正则表达式反向引用的findall不起作用

3

最近我在一个程序中使用了正则表达式。在这个程序中,我使用它们来查找与某个RE匹配的单词列表中的单词。然而,当我尝试在这个程序中使用反向引用时,我得到了一个有趣的结果。

以下是代码:

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 上使用这个正则表达式时匹配了这些单词)。但是,当我在Python中运行代码(我使用3.5.1版本),我得到了以下结果:['e','e']。请问有更多正则表达式经验的人能解释一下为什么会出现这个问题,并告诉我如何解决吗?谢谢。

pythex给出了相同的结果... ee.... - Tadhg McDonald-Jensen
@TadhgMcDonald-Jensen 抱歉,我的意思是当我尝试用正则表达式简单匹配 "reel" 和 "reed" 时,我没有尝试在 Pythex 中使用 findall。 - ollie stubbs
可能是重复的 - https://dev59.com/oGsz5IYBdhLWcg3wHUIU - gaganso
1个回答

5
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演示

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接