關於正則表達式(特別是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. C#正則表達式速度問題
- 2. 速度模板 - 正則表達式
- 3. Ruby正則表達式 - 速度問題
- 4. C++正則表達式速度優化
- 5. 加速python正則表達式匹配
- 6. Python的正則表達式的速度 - 貪婪與非貪婪
- 7. 提高Python中正則表達式操作的速度
- 8. 正則表達式正則表達式正則表達式使用正則表達式,但不是與Python
- 9. 正則表達式python表達式
- 10. Python的正則表達式:「喜歡」正則表達式模式?
- 11. 正則表達式難度
- 12. Python正則表達式子
- 13. Python row.get(正則表達式)
- 14. Python 3.3正則表達式?
- 15. python正則表達式
- 16. Python和正則表達式
- 17. Python - 正則表達式dir
- 18. python unicode正則表達式
- 19. Python正則表達式
- 20. 正則表達式和Python
- 21. 正則表達式在Python
- 22. Python 2.6正則表達式
- 23. 的Python:正則表達式
- 24. Python正則表達式(\ .. +)?
- 25. python sql正則表達式
- 26. Python的正則表達式
- 27. Python的正則表達式?
- 28. 正則表達式^ $ Python?
- 29. IPv6正則表達式python
- 30. Python。正則表達式
標題中存在''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