天天看點

python正規表達式的懶惰比對和貪婪比對說明

第一次碰到這個問題的時候,确實不知道該怎麼辦,後來請教了一個大神,加上自己的了解,才了解是什麼意思,這個東西寫python的會經常用到,而且會特别頻繁,在此寫一篇部落格,希望可以幫到一些朋友。

例:一個字元串 “abcdacsdnd”

①懶惰比對

regex = “a.*?d”

②貪婪比對

regex = “a.*d”

測試代碼:

# coding=UTF-8
import re

str = "abcdacsdn"
print("原始字元串 " + str)

# 懶惰比對
regexL = "a.*?d"
print("懶惰比對 = " + regexL)
regL = re.compile(regexL)
listL = re.findall(regL, str)
print("懶惰比對結果")
print(listL)

# 貪婪比對
regexT = "a.*d"
print("貪婪比對 = " + regexT)
regT = re.compile(regexT)
listT = re.findall(regT, str)
print("貪婪比對結果")
print(listT)           

複制

測試結果:

python正規表達式的懶惰比對和貪婪比對說明

結果分析:

懶惰比對,比對成功兩次,一次abcd,一次acsd,比對到滿足條件的abcd就停止了此次比對,不會幹擾後面的繼續比對。

貪婪比對,比對成功一次,隻有abcdacsd,比對到字元串後,會最大限度的占用字元串

以上兩種,一個是盡量比對最短串,一個是比對最長串。

補充知識:python正則比對中貪婪比對效率比較

用例回歸完成之後,一般都要生成一個summary_report.但是,發現生成報告的時間耗時很久,搜集資料發現與比對檔案内容使用的正規表達式有很大關系.

1.比對模式說明

下圖中圈住的部分,沒有注釋掉的使用貪婪比對,注釋掉的使用非貪婪比對

python正規表達式的懶惰比對和貪婪比對說明

執行時間上二者差别巨大;另外執行時間與正規表達式的長度也有關系,較長的表達式建議分段比對.

2.貪婪比對時間

python正規表達式的懶惰比對和貪婪比對說明

3.非貪婪比對時間

python正規表達式的懶惰比對和貪婪比對說明

以上這篇python正規表達式的懶惰比對和貪婪比對說明就是小編分享給大家的全部内容了,希望能給大家一個參考。