python非貪婪匹配 python正則非貪婪模式

2021-10-19 22:17:08 字數 2016 閱讀 6888

那如果只想匹配1次怎麼辦呢,這就是正則中非貪婪模式的概念了

原理就是利用?與其他匹配次數規則進行組合

單個匹配規則:

* = 表示匹配0-n次

+ = 表示匹配1-n次

?= 表示匹配0-1次

三者可組合成非貪婪模式匹配次數解析:*? +?  ??

簡而言之:它們必須結合左右的子串進行匹配,左邊正則必須非空,右邊正則可以為空,中心思想就是在匹配到右邊的正則之前盡可能少次匹配左邊的正則

match是從頭開始匹配,找到第乙個符合條件的子字串

?? =(reg1?)?reg2 = (reg1)reg2

in [149]: re.match(r'\w??\d','123wer123')  # 第乙個\d即數字之前,\w只能匹配0-1次; 這裡第乙個\d之前可匹配\w 0次,返回第乙個數字

out[149]:

in [150]: re.match(r'\w??\d','w123wer123')  # 第乙個\d數字之前,\w只能i匹配0-1次;這裡第乙個\d之前\w匹配到一次,返回乙個字母+第乙個數字

out[150]:

in [151]: re.match(r'\w??\d','wx123wer123')  # 第乙個\d數字之前,\w只能匹配0-1次; 這裡\d前面匹配到\w 2次,match失敗,返回none

in [152]: re.match(r'\w??\d','wxwer') #\d至少匹配1次; 這裡\d沒匹配到,所以最終match失敗,返回none

in [153]: re.match(r'\w??','wxwer')  # \w只能匹配0-1次;這裡選少的匹配0次

out[153]:

*? =(reg1*)?reg2 = (reg1)reg2

in [154]: re.match(r'\w*?\d','123wer123') # 第乙個\d前\w只能匹配0-n次; 這裡\d前可匹配0次\w, 返回第乙個數字

out[154]:

in [155]: re.match(r'\w*?\d','wx123wer123')  # 第乙個\d前\w只能匹配0-n次;這裡\d前匹配2次\w, 返回2個字母+乙個數字

out[155]:

in [156]: re.match(r'\w*?\d','wxe')  #\d至少要匹配一次;這裡\d沒有匹配項,最終匹配失敗,返回none

in [157]: re.match(r'\w*?','wxe')  # \w只能匹配0-n次; 這裡最少匹配0次

out[157]:

+? =(reg1+)?reg2 = (reg1)reg2

in [160]: re.match(r'\w+?\d','%123wer123')  # 第乙個\d前\w匹配只能匹配1-n次;這裡第乙個\d前\w只匹配到0次,最終match失敗,返回none

in [161]: re.match(r'\w+?\d','wsx123wer123')  #第乙個\d前\w只能匹配1-n次;這裡第乙個\d前\w最少匹配3次,最後返回三個字母+第乙個數字

out[161]:

in [162]: re.match(r'\w+?\d','wsxwer')  # \d必須至少匹配到一次;這裡\d匹配0次,最終匹配失敗,返回none

in [163]: re.match(r'\w+?','wsxwer')  # \w只能匹配1-n次;這裡\w最少可匹配1次,即返回第乙個字母

out[163]:

in [165]: re.match(r'w+?\w','wsxwer')  # 第乙個\w之前,w只能出現1-n次;這裡w最少可匹配到一次,所以返回w+第乙個字母

out[165]:

in [27]: re.match(r'aw+?\w','awwsxwer')  # 第乙個字母必須是a,在a和\w之間,w可出現1-n次; 這裡w最少可匹配到1次

out[27]:

in [32]: re.match(r'aw+?s','awawsxwer')

in [33]: re.match(r'(aw)+?s','awawsxwer')

貪婪匹配和非貪婪匹配

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

shell 中 貪婪匹配 和 非貪婪匹配

舉個栗子 1 2 v jfedu.shiyiwen.com echo 乙個 為非貪婪匹配,即匹配最短結果。從右到左進行非貪婪匹配,匹配什麼呢?匹配已 的字元。那麼當然是匹配到了.com 然後執行刪除匹配到的字元。結果就是 這裡的 相當於定界符。而 是萬用字元 jfedu.shiyiwen 1 ech...

正則非貪婪匹配

string str 註冊商 xiamen ename network technology corporation limited dba ename corp,網域名稱伺服器 whois.ename.com,相關 dns 伺服器 ns1.ename.net,dns 伺服器 ns2.ename.n...