python re的findall和finditer的區(qū)別詳解
python正則模塊re中findall和finditer兩者相似,但卻有很大區(qū)別。
兩者都可以獲取所有的匹配結(jié)果,這和search方法有著很大的區(qū)別,同時(shí)不同的是一個(gè)返回list,一個(gè)返回一個(gè)MatchObject類(lèi)型的iterator
假設(shè)我們有這樣的數(shù)據(jù):其中數(shù)字代表電話號(hào),xx代表郵箱類(lèi)型
content = ’’’email:12345678@163.comemail:2345678@163.comemail:345678@163.com’’’
需求:(正則沒(méi)有分組)提取所有的郵箱信息
result_finditer = re.finditer(r'd+@w+.com', content)#由于返回的為MatchObject的iterator,所以我們需要迭代并通過(guò)MatchObject的方法輸出for i in result_finditer : print i.group()result_findall = re.findall(r'd+@w+.com', content)#返回一個(gè)[] 直接輸出or或者循環(huán)輸出print result_findallfor i in result_findall : print i
需求:(正則有分組)提取出來(lái)所有的電話號(hào)碼和郵箱類(lèi)型
result_finditer = re.finditer(r'(d+)@(w+).com', content)#正則有兩個(gè)分組,我們需要分別獲取分區(qū),分組從0開(kāi)始,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í)返回的雖然為[],但不是簡(jiǎn)單的[],而是一個(gè)tuple類(lèi)型的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)正則沒(méi)有分組是返回的就是正則的匹配
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我們無(wú)需手動(dòng)將整個(gè)正則用()括起來(lái)group()代表整個(gè)正則的匹配
實(shí)際中我們根據(jù)我們的需求選擇方法既可。
到此這篇關(guān)于python re的findall和finditer的區(qū)別詳解的文章就介紹到這了,更多相關(guān)python re的findall和finditer內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!
相關(guān)文章:
1. idea設(shè)置提示不區(qū)分大小寫(xiě)的方法2. IntelliJ IDEA設(shè)置默認(rèn)瀏覽器的方法3. HTTP協(xié)議常用的請(qǐng)求頭和響應(yīng)頭響應(yīng)詳解說(shuō)明(學(xué)習(xí))4. CentOS郵件服務(wù)器搭建系列—— POP / IMAP 服務(wù)器的構(gòu)建( Dovecot )5. IntelliJ IDEA創(chuàng)建web項(xiàng)目的方法6. .NET SkiaSharp 生成二維碼驗(yàn)證碼及指定區(qū)域截取方法實(shí)現(xiàn)7. docker容器調(diào)用yum報(bào)錯(cuò)的解決辦法8. VMware中如何安裝Ubuntu9. IntelliJ IDEA導(dǎo)入項(xiàng)目的方法10. django創(chuàng)建css文件夾的具體方法
