关于正则表达式(特别是python re),如果我们忽略表达式的写法,是文本的长度是处理文档所需时间的唯一因素?或者还有其他因素(如文本的结构)如何发挥重要作用?python正则表达式速度
3
A
回答
4
文本的长度及其内容都很重要。
作为一个例子正则表达式a+b
将无法在包含百万b
秒,但更慢含百万a
个字符串的字符串匹配快速。这是因为在第二种情况下需要更多的回溯。
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
6
一个重要的考虑因素也可以是文本是否真正的正则表达式匹配。拿(作为一个人为的例子)正则表达式(x+x+)+y
从this regex tutorial。
当应用于xxxxxxxxxxy
它匹配,采取正则表达式引擎7个步骤。当应用于xxxxxxxxxx
时,它失败(当然),但需要引擎2558步骤才能得出这个结论。
对于xxxxxxxxxxxxxxy
与xxxxxxxxxxxxxx
它已经7 VS 40958步骤,等等成倍...
这种情况特别容易与嵌套的重复或正则表达式同一文本可以通过两个或多个不同的部分进行匹配正则表达式,迫使引擎在能够声明失败之前尝试所有排列组合。这被称为灾难性的回溯。
相关问题
- 1. 速度模板 - 正则表达式
- 2. C++正则表达式速度优化
- 3. Ruby正则表达式 - 速度问题
- 4. 正则表达式正则表达式正则表达式使用正则表达式,但不是与Python
- 5. 正则表达式python表达式
- 6. Python的正则表达式:“喜欢”正则表达式模式?
- 7. 正则表达式难度
- 8. Python Unicode正则表达式
- 9. Python和正则表达式
- 10. 正则表达式或Python
- 11. Python正则表达式Findall
- 12. Python - 正则表达式dir
- 13. python re.sub正则表达式
- 14. Python正则表达式
- 15. 正则表达式python 3.4
- 16. Python正则表达式子
- 17. Python的正则表达式?
- 18. python正则表达式appengine
- 19. 正则表达式在Python
- 20. Python的正则表达式
- 21. 在python正则表达式
- 22. Python的正则表达式
- 23. 正则表达式python
- 24. Python 3.3正则表达式?
- 25. 正则表达式在Python
- 26. Python的正则表达式
- 27. Python正则表达式
- 28. Python正则表达式
- 29. Python的正则表达式{
- 30. Python正则表达式findall
标题中存在''regexp'并且存在('Mark Byers')'=>'True'。 – OTZ 2010-09-27 06:39:47
是文本中冗长的单词,例如“垃圾邮件垃圾邮件....”意义重大?我的正则表达式基本上寻找制表符,并用空格str = re.sub(“\ t”,“”,str)替换,但对于这段特定的文本,它似乎永远不变。根据你的回答,就我而言,这应该不重要。 – goh 2010-09-27 06:48:58
@goh:对于那个特殊的正则表达式,它没有任何区别。这个正则表达式非常简单,所以没有太多的回溯。 – 2010-09-27 06:53:00