2

知道为什么此语句运行速度非常慢(在我之前的测试中大约 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ąą )')

? 不同之处在于最后缺少左括号,但在第二个语句中缺少一个位置。

4

1 回答 1

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

看看这部分如何在重复运算符周围有一个重复运算符?这将通过所有可能的方式将非空白字符分组为 1 个或更多的运行。你可以尝试类似的东西

[\s\wśą-]+

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

于 2013-08-08T22:27:53.343 回答