更新時間:2023-12-18 來源:黑馬程序員 瀏覽量:
在正則表達式中,貪婪匹配和非貪婪匹配是指匹配模式時的兩種不同行為。
貪婪匹配是指正則表達式盡可能多地匹配符合模式的字符串。這意味著它會匹配盡可能多的字符,直到不再滿足匹配條件為止。
例如,考慮以下正則表達式和字符串:
import re text = "This is a test string with some numbers: 12345 and 67890" pattern = r'\d+' matches = re.findall(pattern, text) print(matches)
在這個例子中,\d+匹配一個或多個數(shù)字。由于是貪婪匹配,它會盡可能多地匹配數(shù)字,結(jié)果會是['12345', '67890'],而不是每個數(shù)字單獨匹配。
非貪婪匹配,也稱為懶惰匹配,是指正則表達式盡可能少地匹配符合模式的字符串。它會嘗試找到滿足條件的最小可能匹配。
在正則表達式中,通過在量詞后面加上?來實現(xiàn)非貪婪匹配。
import re text = "This is a test string with some numbers: 12345 and 67890" pattern = r'\d+?' matches = re.findall(pattern, text) print(matches)
這里的\d+?是匹配一個或多個數(shù)字,但是由于加了?,它會盡可能少地匹配,結(jié)果會是['1', '2', '3', '4', '5', '6', '7', '8', '9', '0'],每個數(shù)字都被單獨匹配。
總體來說,貪婪匹配會盡可能多地匹配字符,而非貪婪匹配會盡可能少地匹配字符,這兩種匹配行為在正則表達式的應(yīng)用中都有它們的用處,具體取決于我們想要的匹配結(jié)果。