【问题标题】:Regex backreference findall not working正则表达式反向引用 findall 不起作用
【发布时间】:2016-05-29 18:16:36
【问题描述】:

我最近一直在程序中使用正则表达式。在这个程序中,我使用它们在与某个 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']

请有更多 RE 经验的人解释我为什么会遇到这个问题以及我可以做些什么来解决它。

谢谢。

【问题讨论】:

  • pythex 给出了相同的结果...ee....
  • @TadhgMcDonald-Jensen 抱歉,我的意思是当我尝试简单地将正则表达式与“reel”和“reed”匹配时,我没有尝试在 Pythex 中使用 findall。

标签: python regex python-3.x findall backreference


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-30
    • 1970-01-01
    • 2011-08-12
    • 1970-01-01
    • 1970-01-01
    • 2015-08-12
    • 1970-01-01
    相关资源
    最近更新 更多