Python的學習之旅———re 模塊正則表達式
#重復匹配:. [] ? * + {}
?:左邊那個字符出現0次或1次
print(re.findall(‘ab?‘,‘a ab abb abbb abbbbbb‘))
print(re.findall(‘ab{0,1}‘,‘a ab abb abbb abbbbbb‘))
*:左邊那個字符出現0次或無窮次
print(re.findall(‘ab*‘,‘a ab abb abbb abbbbbb abbc123bbbb‘))
print(re.findall(‘ab{0,}‘,‘a ab abb abbb abbbbbb abbc123bbbb‘))
+:左邊那個字符出現1次或無窮次
re.findall(‘ab+‘,‘a ab abb abbb abbbbbb abbc123bbbb‘)
re.findall(‘ab{1,}‘,‘a ab abb abbb abbbbbb abbc123bbbb‘)
貪婪匹配:.*
print(re.findall(‘a.*b‘,‘a123b456b‘))
非貪婪匹配:.*?
print(re.findall(‘a.*?b‘,‘a123b456b‘))
分組:()
print(re.findall(‘<imag href=\"(.*)\" />‘,
‘<h1>hello</h1><a href="http://www.baidu.com"></a><imag href="http://www.baidu.com/a.jpg" />‘))
只留下組內的內容
print(re.findall(‘<imag href=\"(?:.*)\" />‘,
‘<h1>hello</h1><a href="http://www.baidu.com"></a><imag href="http://www.baidu.com/a.jpg" />‘))
|
print(re.findall(‘compan(?:ies|y)‘,‘Too many companies have gone bankrupt, and the next one is my company‘))
註意:
在python中使用正則表達式,會先被python式識別一次。(也就是會先消耗一次\)
print(re.findall(‘a\\\\c‘,‘a\c a12 a2c‘)) #‘a\\c‘ 所以要想多寫兩個
print(re.findall(r‘a\\c‘,‘a\c a12 a2c‘)) #‘a\\c‘
1 #為何同樣的表達式search與findall卻有不同結果:2 print(re.search(‘\(([\+\-\*\/]*\d+\.?\d*)+\)‘,"1-12*(60+(-40.35/5)-(-4*3))").group()) #(-40.35/5) 3 print(re.findall(‘\(([\+\-\*\/]*\d+\.?\d*)+\)‘,"1-12*(60+(-40.35/5)-(-4*3))")) #[‘/5‘, ‘*3‘] 4 5 #看這個例子:(\d)+相當於(\d)(\d)(\d)(\d)...,是一系列分組 6 print(re.search(‘(\d)+‘,‘123‘).group()) #group的作用是將所有組拼接到一起顯示出來 7 print(re.findall(‘(\d)+‘,‘123‘)) #findall結果是組內的結果,且是最後一個組的結果 8 對於這種情況 取了3次值 9 分別是 ‘1’ ‘ 2’ ‘3’ 10 最後就顯示了 3 這個數字
Python的學習之旅———re 模塊正則表達式