引入模組:
import re
1.查詢
findall 匹配所有,每一項都是列表中的一個元素
ret=re.findall("\d+","sjkhk172按實際花費928") print(ret)
['172', '928']
search 只匹配從左到右的第一個,得到的不是結果,而是一個變數,通過這個變數的group方法來獲取結果。
ret=re.search("\d+","sjkhk172按實際花費928") print(ret) print(ret.group()) <_sre.SRE_Match object; span=(5, 8), match='172'> 172
ret=re.search("\d+","sjkhk172按實際花費928") if ret:#記憶體地址,這是一個正則的匹配結果 print(ret.group())#獲取真正的結果 172
match 從頭開始匹配,相當於search中的正規表示式加上一個^
ret=re.match("\d+$",'172sjkhk按實際花費928') print(ret) None
ret=re.match("\d+",'172sjkhk按實際花費928')
print(ret)
print(ret.group())
<_sre.SRE_Match object; span=(0, 3), match='172'>
172
字串處理的擴充套件:切割、替換
split 切割
s = 'alex83taibai40egon25' # ret = re.split('\d+',s) # print(ret) ['alex', 'taibai', 'egon', '']
sub 替換 舊的 新的 替換次數
ret = re.sub('\d+','h','alex83taibai40egon25',2) print(ret) alexhtaibaihegon25
subn 返回一個元組,返回的第二個元素是替換的次數
ret = re.subn('\d+','H','alex83taibai40egon25') print(ret) ('alexHtaibaiHegonH', 3)
re模組的進階 時間 空間
compile 節省使用正規表示式解決時間問題 把正規表示式編譯成位元組碼,在以後的多次使用過程中不會多次編碼
ret=re.compile("\d+") res=ret.findall("alex83taibai40egon25") print(res)
['83', '40', '25']
res=ret.search("sjkhk172按實際花費928")
print(res.group())
172
finditer 節省正規表示式解決問題的記憶體或者空間
返回一個迭代器,所有的結果都在這個迭代器中,需要通過迴圈+group的形式取值 能夠節省記憶體
ret=re.finditer("\d+","alex83taibai40egon25") for i in ret: print(i.group()) 83 40 25
分組在ret模組下的使用
s = '<a>wahaha</a>' # 標籤語言 html 網頁 ret = re.search('<(\w+)>(\w+)</(\w+)>',s) print(ret.group()) # 所有的結果 print(ret.group(1)) # 數字引數代表的是取對應分組中的內容 print(ret.group(2)) print(ret.group(3)) <a>wahaha</a> a wahaha a
s = '<a>wahaha</a>' ret=re.findall('(\w+)',s ) print(ret) ret=re.findall('>(\w+)<',s) print(ret) ['a', 'wahaha', 'a'] ['wahaha'] 為了findall也可以順利取到分組中的內容,有一個特殊的語法,就是優先顯示分組中的內容
# 取消分組優先(?:正規表示式) ret = re.findall('\d+(\.\d+)?','1.234*4') print(ret)
['.234', '']
# 分組命名 (?P<這個組的名字>正規表示式) # s = '<a>wahaha</a>' # ret = re.search('>(?P<con>\w+)<',s) # print(ret.group(1)) # print(ret.group('con'))
使用前面的分組 要求使用這個名字的分組和前面同名分組中的內容匹配的必須一致
精準的取到整數 過濾掉小數
ret=re.findall(r"\d+\.\d+|\d+","1-2*(60+(-40.35/5)-(-4*3))") print(ret) ret=re.findall(r"\d+\.\d+|(\d+)","1-2*(60+(-40.35/5)-(-4*3))") ret.remove('') print(ret) ['1', '2', '60', '40.35', '5', '4', '3'] ['1', '2', '60', '5', '4', '3']