给定一个输入字符串,fooxxxxxxfooxxxboo我正在尝试编写一个匹配的正则表达式,fooxxxboo即从第二个 foo 开始到最后一个 boo。
我尝试了以下
foo.*?boo 匹配完整的字符串 fooxxxxxxfooxxxboo
foo.*boo 也匹配完整的字符串 fooxxxxxxfooxxxboo
我读了这篇Greedy vs. Reluctant vs. Possessive Quantifiers并且我理解它们的区别,但我试图从匹配正则表达式的末尾匹配最短的字符串,即类似于要从后面评估的正则表达式。有什么办法可以只匹配最后一部分?
码:
str = '<br><br />A<br />B'
print(re.sub(r'<br.*?>\w$', '', str))
Run Code Online (Sandbox Code Playgroud)
它应该返回<br><br />A,但它返回一个空字符串''!
有什么建议吗?
我有一个非常简单的正则表达式与此类似:
HOHO.*?_HO_
有了这个测试字符串...
fiwgu_HOHO_HOHO_HOHOrgh_HOHO_feh_HOHO___HO_fbguyev
_HOHO___HO_(最短匹配,非贪婪)_HOHO_HOHO_HOHOrgh_HOHO_feh_HOHO___HO_(最长的匹配,看起来很贪婪)。为什么?如何使它匹配最短的匹配项?
添加和删除的?结果相同。
编辑 -更好的测试字符串,显示为什么[^HOHO]不起作用:fiwgu_HOHO_HOHO_HOHOrgh_HOHO_feh_HOHO_H_O_H_O_HO_fbguye
我能想到的是,它可能多次匹配-但只有一个匹配_HO_,所以我不明白为什么它没有采用以结尾的最短匹配_HO_,而丢弃了其余匹配。
我已经浏览了所有标题为“非贪婪正则表达式贪婪”之类的问题,但它们似乎都存在其他问题。