1. 程式人生 > >re模塊下的的常用方法

re模塊下的的常用方法

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模塊下的的常用方法