PythonRegex - re模組
1. findall函數
>>> import re
>>> s='123abc456eabc789'
>>> re.findall(r’abc’,s) 結果:['abc', 'abc']
返回結果是一個列表,中間存放的是符合規則的字串,如果沒有符合規則的字串被找到,就返回一個空列表。
2. compile函數
>>> s='111,222,aaa,bbb,ccc333,444ddd123abc456eabc789'
>>> rule=r’\b\d+\b’
>>> compiled_rule=re.compile(rule)
>>> compiled_rule.findall(s) 結果:['111', '222']
直接使用findall ( rule , target )的方式來匹配字串,一次兩次沒什麼,如果是多次使用的話,由於正則引擎每次都要把規則解釋一遍,而規則的解釋又是相當費時間的,所以這樣的效率就很低了。如果要多次使用同一規則來進行匹配的話,可以使用re.compile函數來將規則先行編譯,使用編譯過返回的Regular Expression Object或叫做Pattern對象來進行尋找。
compile函數還可以指定一些規則標誌,來指定一些特殊選項,多個選項之間用 ’|’(位或)串連起來。
I IGNORECASE 忽略大小寫區別
M MULTILINE 多行匹配。在這個模式下’^’(代表字串開頭)和’$’(代表字串結尾)將能夠匹配多行的情況,成為行首和行尾標記。
>>> s=’123 456\n789 012\n345 678’
>>> rc=re.compile(r’^\d+’) #匹配一個位於開頭的數字,沒有使用M選項
>>> rc.findall(s)
['123'] #結果只能找到位於第一個行首的’123’
>>> rcm=re.compile(r’^\d+’, re.M) #使用 M 選項
>>> rcm.findall(s)
['123', '789', '345'] #找到了三個行首的數字
對於‘$’的情況是類似的:
>>> rc=re.compile(r’\d+$’)
>>> rcm=re.compile(r’\d+$’, re.M)
>>> rc.findall(s)
['678']
>>> rcm.findall(s)
['456', '012', '678'] 還有一些其他規則標誌,參考連結: http://blog.csdn.net/smilelance/article/details/6529950
3. match函數與search函數
match( rule , targetString [,flag] )
search( rule , targetString [,flag] ) 第一個參數是正則規則,第二個是目標字串,第三個是選項(同compile函數的選項)
返回結果不是字串列表,而是一個MatchObject (如果匹配成功的話),通過操作這個matchObject,來得到更多的資訊;如果匹配不成功,它們則返回一個NoneType。
所以,一般的使用規則是:
>>> m=re.match( rule , target )
>>> if m: #必需先判斷是否成功
doSomething
兩個函數的區別:
match從字串的開頭開始匹配,如果開頭位置沒有匹配成功,就算失敗;而search會跳過開頭,繼續向後尋找是否有匹配的字串。
4. 其它函數
參考連結: http://blog.csdn.net/smilelance/article/details/6529950