正則表達式或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