小编fle*_*tom的帖子

从未完成运行的正则表达式

我写了一个小的,天真的正则表达式,应该在括号内找到文本:

re.search(r'\((.|\s)*\)', name)

我知道这不是出于某些原因这样做的最好方法,但它工作得很好.我正在寻找的只是一个解释,为什么对于某些字符串,这个表达式开始呈指数级增长然后永远不会完成.昨晚,在运行此代码数月之后,我们的一台服务器突然卡住了匹配类似于以下内容的字符串:

x (y)                                            z
Run Code Online (Sandbox Code Playgroud)

我已经对它进行了实验,并确定在"y"和"z"之间的每个空间所花费的时间都会翻倍:

In [62]: %timeit re.search(r'\((.|\s)*\)', 'x (y)' + (22 * ' ') + 'z')
1 loops, best of 3: 1.23 s per loop

In [63]: %timeit re.search(r'\((.|\s)*\)', 'x (y)' + (23 * ' ') + 'z')
1 loops, best of 3: 2.46 s per loop

In [64]: %timeit re.search(r'\((.|\s)*\)', 'x (y)' + (24 * ' ') + 'z')
1 loops, best of 3: 4.91 s per loop
Run Code Online (Sandbox Code Playgroud)

但是除了空格之外的字符也没有相同的效果:

In [65]: %timeit re.search(r'\((.|\s)*\)', 'x …
Run Code Online (Sandbox Code Playgroud)

python regex

8
推荐指数
2
解决办法
469
查看次数

标签 统计

python ×1

regex ×1