Python的re模塊經常使用方法

re模塊下的經常使用方法:

search 匹配就 返回一個變量,經過group取匹配到的第一個值,不匹配就返回None,group會報錯
match 至關於search的正則表達式中加了一個'^'
spilt 返回列表,按照正則規則切割,默認匹配到的內容會被切掉
sub/subn 替換,按照正則規則去尋找要被替換掉的內容,subn返回元組,第二個值是替換的次數
compile 編譯一個正則表達式,用這個結果去search match findall finditer 可以節省時間
finditer 返回一個迭代器,全部的結果都在這個迭代器中,須要經過循環+group的形式取值 可以節省內存

使用re模塊以前要導入re模塊才能用不然用不了,正則表達式

導入模塊:import  respa

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
相關文章
相關標籤/搜索