gpt4 book ai didi

python - multiline 和 dotall 的非贪婪行为

转载 作者:行者123 更新时间:2023-11-30 22:56:06 24 4
gpt4 key购买 nike

我有以下字符串,我尝试将相应“foo”中的字符串与“bar=1”、“bar=2”或“bar=3”进行匹配。所以一次只能进行一场比赛。

file_header

foo lorem ipsum \pope
24 dolor sit amet, consectetur adipisici elit
Excepteur sint obcaecat cupiditat non
gnu blu bar=1

foo lorem ipsum \
@>@!@ consectetur adipisici elit
gnu blu bar=2
foo lorem ipsum
23 dolor sit amet, consectetur adipisici elit
gnu blu bar=3

foo ... etc

我尝试了一切,从简单的 ^foo.*?bar=2$ 到类似 ^(?!\bfoo\b.*\bfoo\b).*\bfoo\b.*bar=2$。但激活 multiline 和 dotall 后,它将始终匹配第一个“foo”,甚至标记整个文件头。 :(

在使用多行和 dotall 时,似乎不可能实现非贪婪行为。

最佳答案

您可以使用像这样的调和贪婪 token

^foo(?:(?!^foo|bar=2$).)*bar=2$

(?:(?!^foo|bar=2$).)* 匹配任何不是 foo 的文本(在行的开头/string),而不是行/字符串末尾的 bar=2

请参阅regex demo 。然而,这样的构造会消耗资源,建议将其展开。这是一个选项:

^foo[^\nb]*(?:\n(?!foo)[^\nb]*|b(?!ar$)[^\nb]*)*bar=2$

参见another demo .

关于python - multiline 和 dotall 的非贪婪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37142663/

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