python正则表达速度

时间:2010-09-27 06:34:12

标签: python regex

关于正则表达式(特别是python re),如果我们忽略表达式的写法,那么文本的长度是处理文档所需时间的唯一因素吗?或者是否还有其他因素(如文本的结构)也扮演重要角色?

2 个答案:

答案 0 :(得分:6)

一个重要的考虑因素也可能是文本是否与正则表达式实际匹配。从this regex tutorial获取(作为一个人为的例子)正则表达式(x+x+)+y

当应用于xxxxxxxxxxy匹配时,采用正则表达式引擎7步。当应用于xxxxxxxxxx时,它会失败(当然),但需要引擎2558步才能得出这个结论。

对于xxxxxxxxxxxxxxyxxxxxxxxxxxxxx,它已经是7对40958步,依此指数......

对于嵌套重复或正则表达式,这种情况尤其容易发生,其中相同的文本可以由正则表达式的两个或更多不同部分匹配,迫使引擎在能够声明失败之前尝试所有排列。这被称为灾难性的回溯。

答案 1 :(得分:4)

文本的长度及其内容都很重要。

作为示例,正则表达式a+b将无法在包含一百万b s的字符串上快速匹配,但在包含一百万a s的字符串上更慢。这是因为在第二种情况下需要更多的回溯。

import timeit
x = "re.search('a+b', s)"
print timeit.timeit(x, "import re;s='a'*10000", number=10)
print timeit.timeit(x, "import re;s='b'*10000", number=10)

结果:

6.85791902323
0.00795443275612