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

标签 python regex

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

.*?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/

相关文章:

python - OpenERP 模块 xml ValidateError

javascript - 在 p 和 textarea 之间来回移动数据,但保留换行符

regex - MFC:如何构造一个好的正则表达式来验证 URL?

c++ - 匹配 {if cond}foo{else}bar{/if} 的正则表达式

javascript - 正则表达式, "just group, don' t capture”,好像不行

python - Pandas DataFrame 中的 JSON 对象

python - 如何以编程方式从 python 获取 openstack 资源使用指标?

python - 在 Python 2.7.9 中找不到 import ssh

Python 将函数传递给对象

regex - Bash 正则表达式解析 ss 输出