gpt4 book ai didi

Python re.sub 使用非贪婪模式 (.*?) 和字符串结尾 ($) 它变得贪婪了!

转载 作者:太空狗 更新时间:2023-10-29 23:56:06 35 4
gpt4 key购买 nike

代码:

str = '<br><br />A<br />B'
print(re.sub(r'<br.*?>\w$', '', str))

预计返回<br><br />A , 但它返回一个空字符串 '' !

有什么建议吗?

最佳答案

贪婪从左到右起作用,但不是从左到右起作用。它基本上意味着“不匹配,除非你匹配失败”。这是正在发生的事情:

  1. 正则表达式引擎匹配 <br在字符串的开头。
  2. .*?现在被忽略,它是懒惰的。
  3. 尝试匹配> , 并成功。
  4. 尝试匹配\w并失败了。现在很有趣 - 引擎开始回溯,并看到 .*?规则。在这种情况下,.可以匹配第一个> ,所以这场比赛仍有希望。
  5. 这种情况一直发生,直到正则表达式到达斜线。那么>\w可以匹配,但是$失败。再次,引擎回到懒惰 .*规则,并保持匹配,直到匹配 <br><br />A<br />B

幸运的是,有一个简单的解决方案:通过替换 <br[^>]*>\w$您不允许在您的标签之外进行匹配,因此它应该替换最后一次出现的内容。
严格来说,这对 HTML 不太适用,因为标签属性可以包含 >字符,但我认为这只是一个例子。

关于Python re.sub 使用非贪婪模式 (.*?) 和字符串结尾 ($) 它变得贪婪了!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4273987/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com