使用Python正则表达式提取电子邮件域

时间:2018-06-25 18:24:05

标签: regex python-3.x newline whitespace

我正尝试使用

从电子邮件地址中提取域名
 domain = re.search('(@^\S$)', email)

我想匹配除换行符以外的任何非空白字符。但是,我的变量没有返回任何信息,请在下面的我的虽则过程中告知:

  • (@ 表示我们在@符号之后或在@符号处开始字符串

  • ^ \ S 表示在@

  • 之后重复任何非空白字符
  • $)表示排除/ n或换行符并在此结束

2 个答案:

答案 0 :(得分:2)

您当前的正则表达式匹配@,后跟该行的开头,后跟一个非空白字符,然后是输入的末尾。 (我假设您已经在实际代码中对字符串的反斜杠进行了正确的转义。)

您要做的是匹配位置之后 @,然后匹配任意数量的非空白字符,然后匹配输入的结尾:

domain = re.search(r"(?<=@)(\S+$)", email)

在这里,(?<=@)是一个向后看,它测试前面的一个或多个字符与括号的内容是否匹配; \S+匹配一个或多个非空白字符; $与行尾匹配。

另一个不需要正则表达式的选项是:

domain = email.split("@")[1]

答案 1 :(得分:1)

^元字符与字符串的开头匹配,因此将其放在模式开头的任何位置都不会匹配任何内容。

此外,\S将匹配不需要的字符,相反,我们可以看看specifications for domain name来完全匹配所需的字符。

最后,您可以使用捕获组来捕获域并丢弃@

import re

email = 'foo@stackoverflow.com'

domain = re.search('@((\w|\w[\w\-]*?\w)\.\w+)', email).group(1)

print(domain) # stackoverflow.com