我想提取電子郵件地址的域名,但只提取域之前的部分。
@([\w] )
使用像“[email protected]”這樣的電子郵件地址,我可以提取 Telenet。但是,當電子郵件地址是“[email protected]”時,我得到的是“發票”而不是“telenet”。
我嘗試了一個條件,但我無法讓它作業。
uj5u.com熱心網友回復:
根據定義有效電子郵件地址格式的rfc522,電子郵件地址的本地部分(即@domain_name之前的部分)可以包含“@”字符(如果它在帶引號的字串中)。因此,您要確保在最后一個“@”之后開始掃描。
以下正則運算式是特定的,將掃描到域名的倒數第二級的捕獲組 1:
[@.]([^.@] )\.([^.@] )$
[@.]- 匹配“@”或“.”。這與新域級別的開始匹配。正則運算式的其余部分將保證要掃描的剩余字符中沒有“@”字符。([^.@] )- 掃描以捕獲第 1 組的一個或多個字符,這些字符可以是“.” 也不是“@”。.- 匹配一個“.”。([^.@] )- 匹配一個或多個 '.' 字符 也不是“@”。$- 匹配字串的結尾。
請參閱正則運算式演示。
第二種方法使用更簡單的正則運算式首先掃描最后的“@”后面的任何內容以捕獲完整域:
(?<=@)[^@] $
(?<=@)- 一個肯定的后視斷言,宣告前面的字符是一個“@”。[^@]- 匹配 1 個或多個非“@”字符。$- 匹配字串的結尾。
請參閱正則運算式演示
如果您的正則運算式引擎不支持后視斷言,請改用以下正則運算式,在這種情況下,域將位于捕獲組 1 中:
@([^@] )$
然后就可以在.字符上分割掃描的域,選擇域的任意N個部分如下(代碼為Python):
import re
email = "[email protected]"
m = re.search(r'@([^@] )$', email)
if m:
# We have a match
domain = m.group(0)
domain_parts = domain.split('.')
# the penultimate part: 'telnet'
print(domain_parts[-2])
# the last 2 parts: telnet.be
print('.'.join(domain_parts[-2:]))
印刷:
telenet
telenet.be
參見 Python 演示
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/396635.html
