【问题标题】:regex matching in python not working properly - Overlapping matches?python中的正则表达式匹配无法正常工作 - 重叠匹配?
【发布时间】:2014-02-20 20:03:41
【问题描述】:

我正在尝试regex lazy matches。 当我尝试这个时:

>>> text='<em>Hello <>World</em>'
>>> pattern3=re.compile('<.*?>')
>>> for mat in re.findall(pattern3,text):
...     print mat
... 
<em>
<>
</em>

它按预期工作,并给出了三​​个可能的匹配项 但是当我尝试这个时:

>>> text="1011"
>>> pattern1=re.compile('1.*?1')
>>> for mat in re.findall(pattern1,text):
...     print mat
... 
101

我只得到一个输出,但我应该得到101 and 11,为什么11 不匹配。 我的regex '1.*?1' 查找1,后跟零个或多个任何内容,然后再次查找1

【问题讨论】:

  • 简短的回答是因为重叠匹配。第二个1 在第一个匹配中匹配,并且不能再次“参与”另一个匹配。尝试四处寻找重叠的匹配项。我敢肯定它以前被问过。例如this 也许?

标签: python regex non-greedy


【解决方案1】:

您是否尝试过这种重叠匹配?

pattern1=re.compile('(?=(1.*?1))')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 2010-09-24
    • 2014-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多