首頁常見問題正文

什么是貪婪匹配和非貪婪匹配?

更新時間:2023-12-18 來源:黑馬程序員 瀏覽量:

IT培訓班

  在正則表達式中,貪婪匹配和非貪婪匹配是指匹配模式時的兩種不同行為。

  一、貪婪匹配

  貪婪匹配是指正則表達式盡可能多地匹配符合模式的字符串。這意味著它會匹配盡可能多的字符,直到不再滿足匹配條件為止。

  例如,考慮以下正則表達式和字符串:

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ù)字單獨匹配。

1702867397182_貪婪匹配和非貪婪匹配.jpg

  二、非貪婪匹配

  非貪婪匹配,也稱為懶惰匹配,是指正則表達式盡可能少地匹配符合模式的字符串。它會嘗試找到滿足條件的最小可能匹配。

  在正則表達式中,通過在量詞后面加上?來實現(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é)果。

分享到:
在線咨詢 我要報名
和我們在線交談!