gpt4 book ai didi

Python 正则表达式 : how to match anything up to a specific string and avoid backtraking when failin

转载 作者:太空宇宙 更新时间:2023-11-03 18:28:55 24 4
gpt4 key购买 nike

我正在尝试制作一个能够将任何内容匹配到特定模式的正则表达式。然后,正则表达式将继续查找其他模式,直到字符串末尾,但在某些情况下,该模式将不存在,并且匹配将失败。现在我陷入了困境:

.*?PATTERN

问题是,在字符串不存在的情况下,由于回溯,这会花费太多时间。为了缩短这个时间,我尝试使用正向前瞻来模仿原子分组,如本线程中所述(顺便说一句,我在 python-2.7 中使用 re 模块): Do Python regular expressions have an equivalent to Ruby's atomic grouping?

所以我写道:

(?=(?P<aux1>.*?))(?P=aux1)PATTERN

当然,当 STRING 不存在时,这比以前的版本更快,但问题是,它不再与 STRING 匹配,因为 .匹配到字符串末尾的所有内容,并且在先行后将丢弃先前的状态。

所以问题是,有没有一种方法可以进行像 .*?STRING 这样的匹配,并且在匹配不存在时能够更快地失败?

最佳答案

您可以尝试使用split

如果结果的长度为 1,则表示没有匹配项。如果您得到两个或更多,您就知道第一个是第一场比赛。如果将拆分限制为大小 1,则会短路后面的匹配:

"HI THERE THEO".split("TH", 1) # ['HI ', 'ERE THEO']

结果的第一个元素取决于匹配。

关于Python 正则表达式 : how to match anything up to a specific string and avoid backtraking when failin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22714864/

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