Jet*_*Guo 6 python regex regex-greedy
码:
str = '<br><br />A<br />B'
print(re.sub(r'<br.*?>\w$', '', str))
Run Code Online (Sandbox Code Playgroud)
它应该返回<br><br />A,但它返回一个空字符串''!
有什么建议吗?
贪婪从左到右,但不是.它基本上意味着"除非你没有匹配,否则不匹配".这是发生了什么:
<br在字符串的开头匹配..*? 现在被忽略了,很懒.>,并成功.\w并失败.现在它很有趣 - 引擎开始回溯,并看到.*?规则.在这种情况下,.可以匹配第一个>,所以仍然希望这场比赛.>\w可以匹配,但$失败了.同样,引擎回到懒惰.*规则,并保持匹配,直到它匹配<br><br />A<br />B幸运的是,有一个简单的解决方案:通过替换<br[^>]*>\w$你不允许在你的标签之外进行匹配,所以它应该替换最后一次出现.
严格地说,这对HTML不起作用,因为标签属性可以包含 >字符,但我认为它只是一个例子.