python re的findall和finditer的區(qū)別詳解
python正則模塊re中findall和finditer兩者相似,但卻有很大區(qū)別。
兩者都可以獲取所有的匹配結(jié)果,這和search方法有著很大的區(qū)別,同時不同的是一個返回list,一個返回一個MatchObject類型的iterator
假設(shè)我們有這樣的數(shù)據(jù):其中數(shù)字代表電話號,xx代表郵箱類型
content = '''email:12345678@163.com email:2345678@163.com email:345678@163.com '''
需求:(正則沒有分組)提取所有的郵箱信息
result_finditer = re.finditer(r"\d+@\w+.com", content) #由于返回的為MatchObject的iterator,所以我們需要迭代并通過MatchObject的方法輸出 for i in result_finditer : print i.group() result_findall = re.findall(r"\d+@\w+.com", content) #返回一個[] 直接輸出or或者循環(huán)輸出 print result_findall for i in result_findall : print i
需求:(正則有分組)提取出來所有的電話號碼和郵箱類型
result_finditer = re.finditer(r"(\d+)@(\w+).com", content) #正則有兩個分組,我們需要分別獲取分區(qū),分組從0開始,group方法不傳遞索引默認(rèn)為0,代表了整個正則的匹配結(jié)果 for i in result_finditer : phone_no = i.group(1) email_type = i.group(2) result_findall = re.findall(r"(\d+)@(\w+).com", content) #此時返回的雖然為[],但不是簡單的[],而是一個tuple類型的list #如:[('12345678', '163'), ('2345678', '163'), ('345678', '163')] for i in result_findall : phone_no = i[0] email_type = i[1]
命名分組和非命名分組的情況是一樣的。
findall注意點:
1.當(dāng)正則沒有分組是返回的就是正則的匹配
re.findall(r"\d+@\w+.com", content) ['2345678@163.com', '2345678@163.com', '345678@163.com']
2.有一個分組返回的是分組的匹配而不是整個正則的匹配
re.findall(r"(\d+)@\w+.com", content) ['2345678', '2345678', '345678']
3.多個分組時將分組裝到tuple中 返回
re.findall(r"(\d+)@(\w+).com", content) [('2345678', '163'), ('2345678', '163'), ('345678', '163')]
因此假如我們需要拿到整個正則和每個分組的匹配,使用findall我們需要將整個正則作為一個分組
re.findall(r"((\d+)@(\w+).com)", content) [('2345678@163.com', '2345678', '163'), ('2345678@163.com', '2345678', '163'), ('345678@163.com', '345678', '163')]
而使用finditer我們無需手動將整個正則用()括起來group()代表整個正則的匹配
實際中我們根據(jù)我們的需求選擇方法既可。
到此這篇關(guān)于python re的findall和finditer的區(qū)別詳解的文章就介紹到這了,更多相關(guān)python re的findall和finditer內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
PyTorch加載模型model.load_state_dict()問題及解決
這篇文章主要介紹了PyTorch加載模型model.load_state_dict()問題及解決,具有很好的參考價值,希望對大家有所幫助。2023-02-02numpy中實現(xiàn)ndarray數(shù)組返回符合特定條件的索引方法
下面小編就為大家分享一篇numpy中實現(xiàn)ndarray數(shù)組返回符合特定條件的索引方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-04-04Tensorflow實現(xiàn)在訓(xùn)練好的模型上進行測試
今天小編就為大家分享一篇Tensorflow實現(xiàn)在訓(xùn)練好的模型上進行測試,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-01-01python eval 轉(zhuǎn)換k m到乘法計算的操作
這篇文章主要介紹了python eval 轉(zhuǎn)換k m到乘法計算的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-05-05Python爬取百度地圖POI數(shù)據(jù)代碼的步驟
爬取百度地圖的POI數(shù)據(jù)涉及法律和道德問題,因為這類數(shù)據(jù)受到版權(quán)保護,且大多數(shù)在線地圖服務(wù)都有嚴(yán)格的反爬蟲措施,這篇文章主要介紹了Python爬取百度地圖POI數(shù)據(jù)代碼,需要的朋友可以參考下2024-08-08