正則表達式或regex是模式表達式,可用于搜索和替換文本操作、驗證、字符串拆分等。

這些模式由字符、數(shù)字和特殊字符組成,其形式使模式與我們正在搜索的某些文本段相匹配。

正則表達式廣泛用于模式匹配,各種編程語言都有用于表示它們以及與匹配結(jié)果交互的接口。

在本文中,我們將看看如何使用正則表達式在Python 中驗證電子郵件地址。

通用電子郵件正則表達式

值得注意的是,沒有這樣的正則表達式可以匹配每個可能的有效電子郵件地址。雖然,有些表達式可以匹配大多數(shù)有效的電子郵件地址。

我們需要定義我們正在尋找什么樣的電子郵件地址格式。最常見的電子郵件格式是:

#(用戶名)@(域名).(頂級域名) (username)@(domainname).(top-leveldomain)

因此,我們可以將其歸結(jié)為@將前綴與域名分開的符號模式。

該前綴是收件人的姓名-這可能包含大寫和小寫字母,數(shù)字和一些特殊字符,如字符串.(點), -(連字符),和_(下劃線)。

而域名和頂級域名則由一個.(點符號)劃分的。域名可以包含大寫和小寫字母、數(shù)字和-(連字符)符號。此外,頂級域名的長度必須至少為 2 個字符(全部大寫或小寫)。

簡單來說,我們的電子郵件正則表達式可能如下所示:

(string1)@(string2).(2+characters)

這將可以匹配正確的電子郵件地址,例如:

name.surname@gmail.com anonymous123@ya my_email@ou

使用相同的表達式,這些電子郵件地址將匹配失?。?/p>johnsnow@gmail anonymous123@...uk myemail@outlook.

值得注意的是,字符串不應包含某些特殊字符,以免再次破壞表單。此外,頂級域不能是... 考慮到這些情況,我們可以將這些規(guī)則放入一個具體的表達式中,該表達式考慮了比第一種表示更多的情況:

([A-Za-z0-9]+[.-_])*[A-Za-z0-9]+@[A-Za-z0-9-]+(\.[A-Z|a-z]{2,})+

前綴中的特殊字符不能正好位于@符號之前,前綴也不能以它開頭,因此我們確保每個特殊字符前后至少有一個字母數(shù)字字符。

至于域名,一封電子郵件可以包含幾個用點分隔的頂級域名。

顯然,這個正則表達式比第一個更復雜,但它涵蓋了我們?yōu)殡娮余]件格式定義的所有規(guī)則。但是它有可能正確驗證一些我們沒有想到的邊緣情況。

使用 Python 驗證電子郵件地址

Python 中的 re 模塊可以導入使用Python的正則表達式的類和方法,因此我們將其導入到我們的腳本中。我們將使用的方法是re.fullmatch(pattern, string, flags)。僅當整個字符串與模式匹配時,此方法才返回匹配對象,在其他情況下,它都返回None。

注意: re.fullmatch()在 Python 3.4 中引入,在此之前,re.match()改為使用。在較新的版本上,fullmatch()首選。

讓我們compile()函數(shù)使用前面的正則表達式,并定義一個簡單的函數(shù)來接受電子郵件地址并使用該表達式來驗證它:

import re regex = re.compile(r'([A-Za-z0-9]+[.-_])*[A-Za-z0-9]+@[A-Za-z0-9-]+(\.[A-Z|a-z]{2,})+') def isValid(email): if re.fullmatch(regex, email): print("有效的email地址") else: print("無效的email地址")

re.compile()方法將正則表達式模式編譯為正則表達式對象。

現(xiàn)在,讓我們在之前看過的一些示例上測試代碼:

isValid("name.surname@gmail.com") isValid("anonymous123@ya") isValid("anonymous123@...uk") isValid("...@domain.us")

輸出:

有效的email地址 有效的email地址 無效的email地址 無效的email地址

太棒了,我們有了一個正常運行的郵件地址校驗系統(tǒng)!

更為強大的電子郵件正則表達式

我們上面使用的表達式適用于大多數(shù)情況,并且適用于任何合理的應用程序。但是,如果安全性受到更高的關(guān)注,或者如果您喜歡編寫正則表達式,您可以選擇收緊可能性的范圍,同時仍然允許有效的電子郵件地址通過。

更長表達式往往會變得有點復雜且難以閱讀,這個表達式也不例外:

(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=^_`{|}~-]+)* |"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f] |\\[\x01-\x09\x0b\x0c\x0e-\x7f])*") @ (?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])? |\[(?:(?:(2(5[0-5]|[0-4][0-9]) |1[0-9][0-9]|[1-9]?[0-9]))\.){3}(?:(2(5[0-5]|[0-4][0-9]) |1[0-9][0-9]|[1-9]?[0-9])|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f] |\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])

下圖是符合RFC5322的正則表達式,涵蓋了 99.99% 的輸入電子郵件地址。* 用文字來解釋它通常是比較困難的,但可以通過圖片大致了解它:

結(jié)論

Python中使用正則表達式驗證電子郵件的方法有很多種,主要取決于我們判斷尋找郵件的特定格式。同時,沒有一種獨特的正則表達式模式適用于所有電子郵件格式,我們只需要定義郵件規(guī)則,并相應地構(gòu)建適合的正則表達式匹配模式。

1.《Python:教你使用正則表達式 (RegEx) 驗證電子郵件地址》援引自互聯(lián)網(wǎng),旨在傳遞更多網(wǎng)絡信息知識,僅代表作者本人觀點,與本網(wǎng)站無關(guān),侵刪請聯(lián)系頁腳下方聯(lián)系方式。

2.《Python:教你使用正則表達式 (RegEx) 驗證電子郵件地址》僅供讀者參考,本網(wǎng)站未對該內(nèi)容進行證實,對其原創(chuàng)性、真實性、完整性、及時性不作任何保證。

3.文章轉(zhuǎn)載時請保留本站內(nèi)容來源地址,http://f99ss.com/gl/3030894.html