[英]Why my Python regular expression pattern run so slowly?
請查看我的正則表達式模式代碼:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import re
print 'Start'
str1 = 'abcdefgasdsdfswossdfasdaef'
m = re.match(r"([A-Za-z\-\s\:\.]+)+(\d+)\w+", str1) # Want to match something like 'Moto 360x'
print m # None is expected.
print 'Done'
完成需要49秒,模式有什么問題嗎?
請參閱失控正則表達式:災難性回溯 。
簡而言之,如果有很多組合,子字符串可以拆分為正則表達式的各個部分,則正則表達式匹配器最終可能會嘗試全部。
像(x+)+
和x+x+
這樣的構造實際上保證了這種行為。
要檢測並修復有問題的構造,可以使用以下概念:
在概念層面,有問題的構造的存在意味着你的正則表達式是模糊的 - 即如果你忽略了貪婪/懶惰的行為,那么某些文本沒有單獨的“正確”分割成正則表達式的部分 (或者,等效地,其子表達式) )。 因此,為避免/解決問題,您需要查看並消除所有歧義。
一種方法是
只需在nhahtdh和Marc B的評論中重新發布答案和解決方案:
([A-Za-z\\-\\s\\:\\.]+)+
-> [A-Za-z\\-\\s\\:\\.]+
非常感謝nhahtdh和Marc B!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.