正則表示式.*?探究
阿新 • • 發佈:2018-11-27
幾個常見正則表示式
- [0-9] \d 匹配數字
- \w 字元
- {2} {n} 前面表示式出現n次
-
- + 前面表示式出現 >= 1
- ? 0 or 1
- * >= 0
.*? 懶惰匹配模式
即匹配最短字串,最短匹配,主要是由問號實現
import re
print(re.findall(r'(da?)', 'dads dsds sda daada')) #a出現0或1次
print(re.findall(r'(da*?)', 'dads dsds sda daada')) #a不出現
print(re.findall(r'(da+?)' , 'dads dsds sda daada')) #a只出現一次
print(re.match(r'(da*?)', 'dads dsds sda daada').group())
輸出結果:
[‘da’, ‘d’, ‘d’, ‘d’, ‘da’, ‘da’, ‘da’]
[‘d’, ‘d’, ‘d’, ‘d’, ‘d’, ‘d’, ‘d’]
[‘da’, ‘da’, ‘da’, ‘da’]
d
當?跟在 *+ 後面時,其含義為最小匹配,+本來代表出現次數大於或等於1,
這裡則限定為了1;* 此時表示出現0次
如果為了匹配da再加一個字元,則需要使用 .
#檢視字串長度
s = 'dads dsds sda daada'
print(len(s))
#返回了20個空字串
print(re.findall(r'(.*?)', 'dads dsds sda daada'))
#da匹配後再加一個字元(包括空格)
print(re.findall(r'(da.+?)', 'dads dsds sda daada'))
print(re.findall(r'(da.*?)', 'dads dsds sda daada'))
#貪婪匹配,當遇到地一個d時,匹配沒有停止,一直到最後一個d,所以只返回了一個字串
print(re.findall(r'(d.*d)', 'dads dsds sda daada' ))
#非貪婪匹配,第一次遇到d結束匹配,繼續下一次查詢
print(re.findall(r'(d.*?d)', 'dd dads dsds sda daada'))
#空格匹配和空字串不一樣,注意
print(re.findall(r'(\s)', 'dd dads dsds sda daada'))
19
['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '']
['dad', 'da ', 'daa']
['da', 'da', 'da', 'da']
['dads dsds sda daad']
['dd', 'dad', 'dsd', 'da d']
[' ', ' ', ' ', ' ']
注意正則中的空格,空格也是匹配內容