1. 程式人生 > >Python的學習之旅———re 模塊正則表達式

Python的學習之旅———re 模塊正則表達式

正則表達 fin 個數 logs find 1-1 bank clas col

#重復匹配:. [] ? * + {}

?:左邊那個字符出現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’ ‘310 最後就顯示了 3 這個數字





Python的學習之旅———re 模塊正則表達式