re模組
import re
根據正則規則從一段內容中查詢結果
findall
從字串中選出所有能匹配正規表示式規則的內容,以列表的形式返回
ret = re.findall('\d+','alex123yuan234')
print(ret)
search
在字串內查詢匹配,只找到第一個匹配並返回資訊,返回的是一個結果集,要通過group取值,如果沒有匹配到內容,則返回None,group取值會報錯,所以一般不直接列印ret
ret = re.search('\d+','alex123yuan234')
if ret:
print(ret.group())
match
作用和search一樣,不過只在字串開始處匹配。在search裡的正則規則前加一個 ^ search的功能就和match一樣了
替換
sub
ret = re.sub('\d+','sb','alex84wusir73') # 預設替換所有
ret = re.sub('\d+','sb','alex84wusir73',1) # 寫了1表示替換一次
print(ret)
subn
ret = re.subn('\d+','sb','alex84wusir73')
print(ret) # ('alexsbwusirsb', 2) 返回的是元組,表示替換了兩次
split
ret = re.split('\d+','alex84wusir73yuan')
print(ret) 按照正則規則切割字串
引數說明
引數 正規表示式 待匹配的字串
替換 正則 要換的結果 待匹配的字串
空間方面操作
finditer
ret = re.finditer('\d+','alex84'*200) 返回一個迭代器,內容是結果集
for i in ret:
print(i.group()) 用group從結果集取值
時間操作方面
compile
對於一個經常被重複使用的正規表示式
我們可以先進行一次編譯
之後只要用到這個表示式就可以直接拿出來用
這樣節省了程式碼的'時間'
par = re.compile('d+')
ret = par.findall('alex84')
print(ret)
分組在正規表示式中發揮的作用
findall和分組
分組在findall當中預設會優先被顯示出來
ret = re.findall('>(\w+)<',r'<title>qqxing<\title>')
print(ret)
如果不想優先,那麼在分組中新增(?:正規規則) 表示取消這個規則的優先顯示
ret = re.findall('\d+(?:\.\d+)?',r'1.23+2.34')
print(ret)
split和分組
會保留被切掉的在分組中的內容
search和分組
ret = re.search(r'<(\w+)>(\w+)<\\(\w+)>',r'<title>qqxing<\title>')
print(ret.group(0)) # 不受到分組的影響
print(ret.group(1))
print(ret.group(2)) 可以通過索引取值
在爬蟲\資料清洗的過程中最常用的正規表示式的操作
並不是把我要的內容的正則寫出來
而是把整個頁面都用正則描述下來,然後把需要的內容放在分組裡
這樣就能夠取到想要的內容了
分組命名
ret = re.search(r'<(?P<tab1>\w+)>(?P<content>\w+)<\\(\w+)>',r'<title>qqxing<\title>') print(ret.group(0)) # 不受到分組的影響 print(ret.group('tab1')) # 不受到分組的影響 print(ret.group('content')) # 不受到分組的影響
(?P<名字>分組內容) 給分組命名
print(ret.group('名字') 檢視內容
使用正則解決問題的兩種方式
當我們想匹配的內容混在不想匹配的內容中
只能把不要的也匹配出來 然後去掉不想要的 剩下的就是我們需要的
把整個結構描述下來 對想要的進行分組
ret = re.findall('\d+\.\d+|(\d+)','1-2*(60+(-40.35/5)-(-4*3))')
ret.remove('')
print(ret)