首頁常見問題正文

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

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

IT培訓(xùn)班

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

  一、貪婪匹配

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

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

import re

text = "This is a test string with some numbers: 12345 and 67890"

pattern = r'\d+'
matches = re.findall(pattern, text)
print(matches)

  在這個(gè)例子中,\d+匹配一個(gè)或多個(gè)數(shù)字。由于是貪婪匹配,它會(huì)盡可能多地匹配數(shù)字,結(jié)果會(huì)是['12345', '67890'],而不是每個(gè)數(shù)字單獨(dú)匹配。

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

  二、非貪婪匹配

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

  在正則表達(dá)式中,通過在量詞后面加上?來實(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+?是匹配一個(gè)或多個(gè)數(shù)字,但是由于加了?,它會(huì)盡可能少地匹配,結(jié)果會(huì)是['1', '2', '3', '4', '5', '6', '7', '8', '9', '0'],每個(gè)數(shù)字都被單獨(dú)匹配。

  總體來說,貪婪匹配會(huì)盡可能多地匹配字符,而非貪婪匹配會(huì)盡可能少地匹配字符,這兩種匹配行為在正則表達(dá)式的應(yīng)用中都有它們的用處,具體取決于我們想要的匹配結(jié)果。

分享到:
在線咨詢 我要報(bào)名
和我們在線交談!