python re的findall和finditer的區(qū)別詳解
python正則模塊re中findall和finditer兩者相似,但卻有很大區(qū)別。
兩者都可以獲取所有的匹配結(jié)果,這和search方法有著很大的區(qū)別,同時(shí)不同的是一個(gè)返回list,一個(gè)返回一個(gè)MatchObject類型的iterator
假設(shè)我們有這樣的數(shù)據(jù):其中數(shù)字代表電話號(hào),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) #返回一個(gè)[] 直接輸出or或者循環(huán)輸出 print result_findall for i in result_findall : print i
需求:(正則有分組)提取出來所有的電話號(hào)碼和郵箱類型
result_finditer = re.finditer(r"(\d+)@(\w+).com", content)
#正則有兩個(gè)分組,我們需要分別獲取分區(qū),分組從0開始,group方法不傳遞索引默認(rèn)為0,代表了整個(gè)正則的匹配結(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)
#此時(shí)返回的雖然為[],但不是簡單的[],而是一個(gè)tuple類型的list
#如:[('12345678', '163'), ('2345678', '163'), ('345678', '163')]
for i in result_findall :
phone_no = i[0]
email_type = i[1]
命名分組和非命名分組的情況是一樣的。
findall注意點(diǎn):
1.當(dāng)正則沒有分組是返回的就是正則的匹配
re.findall(r"\d+@\w+.com", content) ['2345678@163.com', '2345678@163.com', '345678@163.com']
2.有一個(gè)分組返回的是分組的匹配而不是整個(gè)正則的匹配
re.findall(r"(\d+)@\w+.com", content) ['2345678', '2345678', '345678']
3.多個(gè)分組時(shí)將分組裝到tuple中 返回
re.findall(r"(\d+)@(\w+).com", content)
[('2345678', '163'), ('2345678', '163'), ('345678', '163')]
因此假如我們需要拿到整個(gè)正則和每個(gè)分組的匹配,使用findall我們需要將整個(gè)正則作為一個(gè)分組
re.findall(r"((\d+)@(\w+).com)", content)
[('2345678@163.com', '2345678', '163'), ('2345678@163.com', '2345678', '163'), ('345678@163.com', '345678', '163')]
而使用finditer我們無需手動(dòng)將整個(gè)正則用()括起來group()代表整個(gè)正則的匹配
實(shí)際中我們根據(jù)我們的需求選擇方法既可。
到此這篇關(guān)于python re的findall和finditer的區(qū)別詳解的文章就介紹到這了,更多相關(guān)python re的findall和finditer內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python中WatchDog的使用經(jīng)驗(yàn)總結(jié)
在?python?中文件監(jiān)視主要有兩個(gè)庫,一個(gè)是?pyinotify,一個(gè)是?watchdog,本文主要為大家詳細(xì)介紹一下Python中WatchDog的使用相關(guān)經(jīng)驗(yàn),感興趣的小伙伴可以了解下2023-12-12
深入講解Python中面向?qū)ο缶幊痰南嚓P(guān)知識(shí)
這篇文章主要介紹了深入講解Python中面向?qū)ο缶幊痰南嚓P(guān)知識(shí),是Python入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-05-05
python基礎(chǔ)教程之對(duì)象和類的實(shí)際運(yùn)用
這篇文章主要介紹了python基礎(chǔ)教程之對(duì)象和類的實(shí)際運(yùn)用,本文講解對(duì)象和類的一方法技巧,例如屬性、內(nèi)置方法、self關(guān)鍵字的運(yùn)用等,需要的朋友可以參考下2014-08-08
Python與Matlab混合編程的實(shí)現(xiàn)案例
本文主要介紹了Python與Matlab混合編程的實(shí)現(xiàn)案例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01
python thread 并發(fā)且順序運(yùn)行示例
以上源文件是對(duì)python中的線程的一個(gè)簡單應(yīng)用,實(shí)現(xiàn)了對(duì)并發(fā)線程的順序運(yùn)行,也許對(duì)你會(huì)有小小幫助2009-04-04
Python+QTimer計(jì)時(shí)器實(shí)現(xiàn)攝像頭視頻的播放和暫停
這篇文章主要為大家詳細(xì)介紹了Python如何通過QTimer計(jì)時(shí)器實(shí)現(xiàn)攝像頭視頻的播放和暫停功能,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-11-11
對(duì)Python中創(chuàng)建進(jìn)程的兩種方式以及進(jìn)程池詳解
今天小編就為大家分享一篇對(duì)Python中創(chuàng)建進(jìn)程的兩種方式以及進(jìn)程池詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-01-01

