为什么这个正则表达式工作非常慢?

时间:2013-08-08 22:23:46

标签: python regex performance

任何想法为什么这句话非常慢(在我之前的测试中大约5个小时)

re.sub('(?i)\(\s*poziom\s*:?(\s*[\wśą-]+)+\s*\)','','(poziom: średniozaawansowany testtesttestąą ()')

虽然这一次在合理的时间内完成:

re.sub('(?i)\(\s*poziom\s*:?(\s*[\wśą-]+)+\s*\)','','(poziom: średniozaawansowany testtesttestąą )')

?差异在于最后缺少开括号,但在第二个陈述中缺少一个位置。

1 个答案:

答案 0 :(得分:4)

(\s*[\wśą-]+)+

看看这个部分如何围绕重复运算符重复运算符?这将通过各种可能的方式将非空白字符分组为1或更多的运行。你可能会尝试像

这样的东西
[\s\wśą-]+

第一个需要永远,因为(使匹配失败,所以它必须花费指数时间回溯,希望其他分组可能性之一可能会匹配。第二个立即找到匹配,而不必进行指数回溯。