python 任何单个字符或数字的灾难性回溯错误?

brvekthn  于 2023-02-07  发布在  Python
关注(0)|答案(1)|浏览(100)

首先,我知道标题并不客观,因为它应该是,我不明白为什么下面的错误是发生在python的"风味"在regex101网站。
为了解释我要做的事情,我必须匹配"item"之后的任何数字,然后是"consumo estimado"之前的所有数字。
Regex 1
但是在输入"消费"这个词后面跟着一个空格之后,我不能放其他的东西,导致"灾难性的回溯"
Regex 2
Regex 3
解决方案是使用. *?来捕获"consumo"和"estimado"之间的所有内容,这可以正常工作。
Regex 4
为什么会出现这个错误?我找不到任何解释。
正则表达式:
^项目\s *(\d {0,})(. *?)消费
不工作的正则表达式:
^项目\s *(\d {0,})(. *?)已使用
^项目\s *(\d {0,})(. *?)消耗量1
我已经有了问题的解决方案,但我只想知道为什么会发生错误。
https://regex101.com/r/uqm7ra/1
编辑1:按照建议,我已经添加了指向当前保存的有问题的正则表达式的链接。

6yt4nkrj

6yt4nkrj1#

\d{0,}看起来有问题,正则表达式引擎将使用越来越少的数字重试,这可能是灾难性的。请使用(\D.*?)?consumo锚它以防止出现这种情况。
同样,如果你想要一个数字,你可以说{1,}(或者更习惯、更简短的+;类似地,{0,}习惯上写作*)。

相关问题