re模塊下的的常用方法
阿新 • • 發佈:2018-08-18
class 列表 span 字符 findall color style html ali
引入模塊:
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‘]
re模塊下的的常用方法