gpt4 book ai didi

python - 为什么惰性匹配在此正则表达式中不起作用?

转载 作者:行者123 更新时间:2023-12-03 00:18:33 27 4
gpt4 key购买 nike

正则表达式:^(.*?)world(.*?)gamer(.*?)$

字符串:

fdsfsa
test abc xyz
hello world ql
te:mlno1
random abc text test 123 890 lll
final line
hu8h
abc
gfdsgfh abc gamer jf123
abc djfkfl
kjdk

目标是找到包含“world”和“gamer”的完整行,以及其间的所有行。这些组不是必需的,只是为了可读性。在 python 中使用 re.M 和 re.DOTALL。

无论第一个 .* 是否是惰性的,它仍然匹配前三行以后的内容,而不是只匹配第三行以后的内容。

可在此处测试:https://regex101.com/r/5UIBB9/4但我也在 python3 中验证了它。

这个问题可以用 ^([^\n]*?)world(.*?)gamer(.*?)$ 解决,但我想了解为什么 . *? 解决方案不起作用。快要死我了...

谢谢!

最佳答案

re.DOTALL 表示点与换行符匹配,因此模式 ^(.*?)world 最初会尝试从第一个字符开始匹配字符串。由于 DOTALL,该匹配最终会成功,因此引擎永远不会超过第一个字符,因此字符串的整个初始部分将作为匹配的一部分包含在内。

这不是懒惰或贪婪的问题 - 如果引擎发现给定位置不可能匹配,引擎只会前进一个字符。

关于python - 为什么惰性匹配在此正则表达式中不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59315780/

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