1. 程式人生 > >Python的re模組常用方法

Python的re模組常用方法

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