知道为什么这个语句运行得很慢吗(在我之前的测试中大约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ąą )')

? 区别在于,在第二个语句中,除了一个位置外,最后缺少左括号。

最佳答案

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

看看这部分是如何在重复运算符周围有一个重复运算符的?这将通过各种可能的方法将非空白字符分组为1个或更多的行。你可以试试
[\s\wśą-]+

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

10-06 02:11