Python的re模組常用方法
阿新 • • 發佈:2019-11-20
re模組下的常用方法:
search 匹配就 返回一個變數,通過group取匹配到的第一個值,不匹配就返回None,group會報錯
match 相當於search的正則表示式中加了一個'^'
spilt 返回列表,按照正則規則切割,預設匹配到的內容會被切掉
sub/subn 替換,按照正則規則去尋找要被替換掉的內容,subn返回元組,第二個值是替換的次數
compile 編譯一個正則表示式,用這個結果去search match findall finditer 能夠節省時間
finditer 返回一個迭代器,所有的結果都在這個迭代器中,需要通過迴圈+group的形式取值 能夠節省記憶體
使用re模組之前要匯入re模組才能用否則用不了,
匯入模組:import re
findall 返回列表 找所有的匹配項
1 ret = re.findall('\d+','age=19,出生年=2000,出生月=10') 2 #返回所有滿足匹配條件的結果,都是放在列表中的,\d+在正則表示式的用法為匹配數字 3 print(ret) 4 結果:['19', '2000', '10']
search 只匹配從左到右的第一個,得到的不是直接的結果,而是一個變數,通過這個變數的group方法來獲取結果,如果沒有匹配到,會返回None,使用group會報錯
1 ret = re.search('\d+','age=19,出生年=2000,出生月=10') 2 print(ret) 3 #結果:是記憶體地址,這是一個正則匹配的結果,<re.Match object; span=(4, 6), match='19'> 4 print(ret.group()) # 通過ret.group()獲取真正的結果 5 #結果:<re.Match object; span=(4, 6), match='19'> 6 #19
match 從頭開始匹配,相當於search中的正則表示式加上一個^
1 ret = re.match('\d+$','age=19,出生年=2000,出生月=10') 2 print(ret) 3 #結果:None
字串處理的擴充套件 : 替換 切割 spilt返回列表,按照正則規則切割,預設匹配到的內容會被切掉
1 s = ('age=19,出生年=2000,出生月=10') 2 print(',切割:',s.split(',')) #按,來切割 3 s1 = ('age=19,出生年=2000,出生月=10') 4 ret = re.split('\d+',s) #按數字來切割 5 print(ret ) 6 #結果:,切割: ['age=19', '出生年=2000,出生月=10'] 7 # ['age=', ',出生年=', ',出生月=', '']
sub 替換,按照正則規則去尋找要被替換掉的內容
1 s = ('age=19,出生年=2000,出生月=10') 2 ret = re.sub('\d+','*',s) #把所有的數字替換成* 3 # 替換的次數自己可以定義例如替換一次ret = re.sub('\d+','*',s,1) 4 print(ret) 5 #結果:age=*,出生年=*,出生月=*
subn 返回一個元組,第二個元素是替換的次數
1 s = ('age=19,出生年=2000,出生月=10') 2 ret = re.subn('\d+','*',s) 3 print(ret) 4 #結果:('age=*,出生年=*,出生月=*', 3)
re模組的進階 : 時間/空間
compile 節省你使用正則表示式解決問題的時間
編譯 正則表示式 編譯成 位元組碼
在多次使用的過程中 不會多次編譯
1 ret = re.compile('\d+') #已經完成編譯了 2 print(ret) 3 # 結果:re.compile('\\d+') 4 s = ('age=19,出生年=2000,出生月=10') 5 res = ret.findall(s) 6 print(res) 7 # 結果:['19', '2000', '10']
finditer 節省你使用正則表示式解決問題的空間/記憶體
1 s = ('age=19,出生年=2000,出生月=10') 2 ret = re.finditer('\d+',s) 3 print(ret) 4 #<callable_iterator object at 0x000001DBEE68A2E8> 5 # 結果:返回一個迭代器,所有的結果都在這個迭代器中,需要通過迴圈+group的形式取值 能夠節省記憶體 6 for el in ret: 7 print(el.group()) 8 #結果:19 9 # 2000 10 # 10