python re的findall和finditer__python

來源:互聯網
上載者:User

(–本文是個人學習和使用過程中的總結,如有錯誤歡迎指正 )
python正則模組re中findall和finditer兩者相似,但卻有很大區別。
兩者都可以擷取所有的匹配結果,這和search方法有著很大的區別,同時不同的是一個返回list,一個返回一個MatchObject類型的iterator

假設我們有這樣的資料:其中數字代表電話號,xx代表郵箱類型

content = '''email:12345678@163.comemail:2345678@163.comemail: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或者迴圈輸出print result_findallfor i in result_findall :    print i

需求:(正則有分組)提取出來所有的電話號碼和郵箱類型

result_finditer = re.finditer(r"(\d+)@(\w+).com", content)#正則有兩個分組,我們需要分別擷取分區,分組從0開始,group方法不傳遞索引預設為0,代表了整個正則的匹配結果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.當正則沒有分組是返回的就是正則的匹配

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()代表整個正則的匹配

實際中我們根據我們的需求選擇方法既可。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.