貪婪和非貪婪

2021-09-26 20:26:54 字數 1025 閱讀 3277

python裡數量詞預設是貪婪的(在少數語言裡也可能是預設非貪婪),總是嘗試匹配盡可能多的字元;

非貪婪則相反,總是嘗試匹配盡可能少的字元。

在"*","?","+",""後面加上?,使貪婪變成非貪婪。

>>> s="this is a number 234-235-22-423"

>>> r=re.match(".+(\d+-\d+-\d+-\d+)",s)

>>> r.group(1)

'4-235-22-423'

>>> r=re.match(".+?(\d+-\d+-\d+-\d+)",s)

>>> r.group(1)

'234-235-22-423'

>>>

正規表示式模式中使用到通配字,那它在從左到右的順序求值時,會盡量「抓取」滿足匹配最長字串,在我們上面的例子裡面,「.+」會從字串的啟始處抓取滿足模式的最長字元,其中包括我們想得到的第乙個整型欄位的中的大部分,「\d+」只需一位字元就可以匹配,所以它匹配了數字「4」,而「.+」則匹配了從字串起始到這個第一位數字4之前的所有字元。

解決方式:非貪婪操作符「?」,這個操作符可以用在"*","+","?"的後面,要求正則匹配的越少越好。

字串為:

請提取url位址

貪婪匹配和非貪婪匹配

貪婪模式 在整個表示式匹配成功的前提下,盡可能多的匹配 非貪婪模式 在整個表示式匹配成功的前提下,盡可能少的匹配 重複匹配0次或1次 重複匹配0次或更多次 重複匹配1次或更多次 預設情況下是貪婪的!content abbbbc pattern re.compile r ab result patte...

貪婪模式和非貪婪模式

1.什麼是正規表示式的貪婪與非貪婪匹配 如 string str abcaxc patter p ab c 貪婪匹配 正規表示式一般趨向於最大長度匹配,也就是所謂的貪婪匹配。如上面使用模式p匹配字串str,結果就是匹配到 abcaxc ab c 非貪婪匹配 就是匹配到結果就好,就少的匹配字元。如上面...

貪婪模式和非貪婪模式

正規表示式通常使用於查詢匹配的字串。python裡數量詞預設是貪婪的 在少數語言裡也可能預設是非貪婪 總是嘗試匹配盡可能多的字元 非貪婪模式剛好相反,總是嘗試匹配盡可能少的字元。例如,正規表示式 ab 如果用於查詢 abbbc 就會找到 abbb 如果使用非貪婪的數量詞 ab 就會找到 a 例如1 ...