正则表达式条件提取电子邮件地址的域名
regular expression conditional to extract domain name of email address
我想提取电子邮件地址的域名,但只提取域名前的部分。
@([\w]+)
使用“john@telenet.be”这样的电子邮件地址,我可以提取 telenet。但是,当电子邮件地址是“john@invoice.telenet.be”时,我得到的是“invoice”而不是“telenet”。
我尝试了一个条件,但我无法让它工作。
根据定义有效电子邮件地址格式的 rfc522,电子邮件地址的 本地部分 ,即 [=46= 之前的部分]@domain_name,如果它位于 引号字符串 中,则可以包含“@”字符。因此,您要确保在 final '@'.
之后开始扫描
以下正则表达式是特定的,将扫描到域名的倒数第二个捕获组 1:
[@.]([^.@]+)\.([^.@]+)$
[@.]
- 匹配“@”或“.”。这与新域级别的开始相匹配。正则表达式的其余部分将保证要扫描的剩余字符中没有'@'字符。
([^.@]+)
- 扫描以捕获组 1 中的一个或多个字符,这些字符要么是“.”,要么是“.”。也不是'@'。
.
- 匹配 '.'.
([^.@]+)
- 匹配一个或多个“.”字符也不是'@'。
$
- 匹配字符串的结尾。
第二种方法使用更简单的正则表达式首先扫描最后的“@”后面的任何内容以捕获完整域:
(?<=@)[^@]+$
(?<=@)
- 一个积极的回顾断言,指出前面的字符是“@”。
[^@]+
- 匹配 1 个或多个非“@”字符。
$
- 匹配字符串的结尾。
如果您的正则表达式引擎不支持后向断言,请改用以下正则表达式,在这种情况下域将位于捕获组 1 中:
@([^@]+)$
然后你可以在 .
字符和 select 域的任何 N 部分拆分扫描域,如下所示(代码是 Python):
import re
email = "john@invoice.telenet.be"
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
我想提取电子邮件地址的域名,但只提取域名前的部分。
@([\w]+)
使用“john@telenet.be”这样的电子邮件地址,我可以提取 telenet。但是,当电子邮件地址是“john@invoice.telenet.be”时,我得到的是“invoice”而不是“telenet”。
我尝试了一个条件,但我无法让它工作。
根据定义有效电子邮件地址格式的 rfc522,电子邮件地址的 本地部分 ,即 [=46= 之前的部分]@domain_name,如果它位于 引号字符串 中,则可以包含“@”字符。因此,您要确保在 final '@'.
之后开始扫描以下正则表达式是特定的,将扫描到域名的倒数第二个捕获组 1:
[@.]([^.@]+)\.([^.@]+)$
[@.]
- 匹配“@”或“.”。这与新域级别的开始相匹配。正则表达式的其余部分将保证要扫描的剩余字符中没有'@'字符。([^.@]+)
- 扫描以捕获组 1 中的一个或多个字符,这些字符要么是“.”,要么是“.”。也不是'@'。.
- 匹配 '.'.([^.@]+)
- 匹配一个或多个“.”字符也不是'@'。$
- 匹配字符串的结尾。
第二种方法使用更简单的正则表达式首先扫描最后的“@”后面的任何内容以捕获完整域:
(?<=@)[^@]+$
(?<=@)
- 一个积极的回顾断言,指出前面的字符是“@”。[^@]+
- 匹配 1 个或多个非“@”字符。$
- 匹配字符串的结尾。
如果您的正则表达式引擎不支持后向断言,请改用以下正则表达式,在这种情况下域将位于捕获组 1 中:
@([^@]+)$
然后你可以在 .
字符和 select 域的任何 N 部分拆分扫描域,如下所示(代码是 Python):
import re
email = "john@invoice.telenet.be"
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