re模組下的的常用方法

Bound_w發表於2018-08-18

引入模組:

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']

 

相關文章