知道为什么这个语句运行得很慢吗(在我之前的测试中大约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śą-]+
第一个需要永远,因为
(
使匹配失败,所以它必须花费指数时间回溯,希望其他分组可能性之一能够匹配。第二种方法可以立即找到匹配项,而不必进行指数回溯。