那如果只想匹配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...