Python全棧之路正則函數(shù)
更新時間:2021年11月30日 14:50:35 作者:熬夜泡枸杞
這篇文章主要為大家介紹了Python正則函數(shù),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
1. 反向引用_命名分組
# ### 反向引用 import re strvar = "<div>明天又要休息了</div>" obj = re.search("<(.*?)>(.*?)<(.*?)>",strvar) print(obj) # 獲取匹配到的內(nèi)容 res1 = obj.group() print(res1) # 獲取分組里的內(nèi)容 res2 = obj.groups() print(res2) # 反向引用的語法 \1把第一個括號里面匹配到的內(nèi)容在引用一次 obj = re.search(r"<(.*?)>(.*?)</\1>",strvar) print(obj) print(obj.group()) print(obj.groups()) strvar = " z3d4pzd a1b2cab " obj = re.search(r"(.*?)\d(.*?)\d(.*?)\1\2",strvar) print(obj) print(obj.group()) print(obj.groups()) # ### 命名分組 """ 3) (?P<組名>正則表達(dá)式) 給這個組起一個名字 4) (?P=組名) 引用之前組的名字,把該組名匹配到的內(nèi)容放到當(dāng)前位置 """ # 寫法一 strvar = " z3d4pzd a1b2cab " obj = re.search(r"(?P<tag1>.*?)\d(?P<tag2>.*?)\d(?P<tag3>.*?)\1\2",strvar) print(obj) print(obj.group()) # 寫法二 strvar = " z3d4pzd a1b2cab " obj = re.search(r"(?P<tag1>.*?)\d(?P<tag2>.*?)\d(?P<tag3>.*?)(?P=tag1)(?P=tag2)",strvar) print(obj) print(obj.group())
2. 正則函數(shù)
# ### 正則函數(shù) import re # search 通過正則匹配出第一個對象返回,通過group取出對象中的值 strvar = "3+4 6*4" obj = re.search(r"(\d+[+*]\d+)",strvar) print(obj) # 獲取匹配到的內(nèi)容 print(obj.group()) # 獲取分組當(dāng)中的內(nèi)容 (返回元組) print(obj.groups()) # match 驗證用戶輸入內(nèi)容 (了解) """search在正則表達(dá)式的前面加上^ 等價于 match ,其他用法上一模一樣""" strvar = "a17366668888" strvar = "17366668888" # obj = re.search(r"^\d+",strvar) # obj = re.match(r"\d+",strvar) # print(obj.group()) print(obj) # split 切割 strvar = "alex|wusir_xboyww@risky" lst = re.split("[|_@]",strvar) print(lst) strvar = "alex2341273894wusir234234xboyww11111risky" lst = re.split("\d+",strvar) print(lst) # sub 替換 strvar = "alex|wusir_xboyww@risky" """ strvar = strvar.replace("|","&") strvar = strvar.replace("_","&") strvar = strvar.replace("@","&") print(strvar) """ # sub(正則,替換的字符,原字符串[,替換的次數(shù)]) res = re.sub("[|_@]","&",strvar) res = re.sub("[|_@]","&",strvar,1) print(res) # subn 替換 (用法上與sub相同,只是返回值不同) res = re.subn("[|_@]","&",strvar) res = re.subn("[|_@]","&",strvar,2) print(res) # res = re.sub("[|_@]","&",strvar) # ('alex&wusir&xboyww@risky', 2) # finditer 匹配字符串中相應(yīng)內(nèi)容,返回迭代器 """返回的是迭代器,迭代器中包含了對象 對象.group來獲取匹配到的值""" from collections import Iterator, Iterable strvar = "sdf23647fdgdfg()*()*23423423" it = re.finditer("\d+",strvar) print(isinstance(it,Iterator)) for obj in it: print(obj.group()) # compile 指定一個統(tǒng)一的匹配規(guī)則 """ 正常情況下,正則表達(dá)式編譯一次,執(zhí)行一次 為了避免反復(fù)編譯,節(jié)省時間空間,可以使用compile統(tǒng)一規(guī)則 編譯一次,終身受益 """ strvar = "asdfs234sdf234" pattern = re.compile("\d+") print("<===>") obj = pattern.search(strvar) print(obj.group()) lst = pattern.findall(strvar) print(lst) # 修飾符 # re.I 使匹配對大小寫不敏感 strvar = "<h1>大標(biāo)題</H1>" pattern = re.compile("<h1>(.*?)</h1>" , flags=re.I) obj = pattern.search(strvar) print(obj.group()) # re.M 使每一行都能夠單獨匹配(多行匹配),影響 ^ 和 $ """單行獨立匹配,而不是整體匹配""" strvar = """ <p>111</p> <a>222</a> <strong>333</strong> """ pattern = re.compile("^<.*?>(?:.*?)<.*?>$" , flags=re.M) lst = pattern.findall(strvar) print(lst) # re.S 使 . 匹配包括換行在內(nèi)的所有字符 strvar = """ give sdfsdfmefive """ # 多個修飾符一起使用通過|拼接 pattern = re.compile(".*?mefive" , flags = re.S|re.I|re.M ) obj = pattern.search(strvar) print(obj.group())
小提示:
爬蟲爬數(shù)據(jù)的時候用finditer,數(shù)據(jù)太大,用迭代器存 strvar = """ <p>111</p> <a>222</a> <strong>333</strong> """ pattern = re.compile("^<.*?>(?:.*?)<.*?>$") lst = pattern.findall(strvar) print(lst) # 這里的結(jié)果為[] 因為.不匹配換行符,所以不會返回結(jié)果 pattern = re.compile("^<.*?>(?:.*?)<.*?>$",flags=re.M) 這里就是 一行的一行的匹配了 不會用for i in找思路 不會用.*?找思路
總結(jié)
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
您可能感興趣的文章:
- Python常用正則函數(shù)使用方法詳解
- python正則表達(dá)式函數(shù)match()和search()的區(qū)別
- Python常用的正則表達(dá)式處理函數(shù)詳解
- 一文秒懂python正則表達(dá)式常用函數(shù)
- Python編程快速上手——strip()函數(shù)的正則表達(dá)式實現(xiàn)方法分析
- Python3正則匹配re.split,re.finditer及re.findall函數(shù)用法詳解
- Python3中正則模塊re.compile、re.match及re.search函數(shù)用法詳解
- 關(guān)于Python正則表達(dá)式 findall函數(shù)問題詳解
相關(guān)文章
python爬蟲lxml庫解析xpath網(wǎng)頁過程示例
這篇文章主要為大家介紹了python爬蟲lxml庫解析xpath網(wǎng)頁的過程示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05caffe的python接口deploy生成caffemodel分類新的圖片
這篇文章主要為大家介紹了caffe的python接口生成deploy文件學(xué)習(xí)以及用訓(xùn)練好的模型(caffemodel)來分類新的圖片示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06python 如何用urllib與服務(wù)端交互(發(fā)送和接收數(shù)據(jù))
這篇文章主要介紹了python 如何用urllib與服務(wù)端交互(發(fā)送和接收數(shù)據(jù)),幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下2021-03-03python設(shè)置 matplotlib 正確顯示中文的四種方式
這篇文章主要介紹了python設(shè)置 matplotlib 正確顯示中文的四種方式,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下2021-05-05Python制作簡易版小工具之計算天數(shù)的實現(xiàn)思路
這篇文章主要介紹了Python制作簡易版小工具之計算天數(shù)的實現(xiàn)思路,代碼簡單易懂,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2020-02-02Django shell調(diào)試models輸出的SQL語句方法
今天小編就為大家分享一篇Django shell調(diào)試models輸出的SQL語句方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-08-08