我正尝试使用
从电子邮件地址中提取域名 domain = re.search('(@^\S$)', email)
我想匹配除换行符以外的任何非空白字符。但是,我的变量没有返回任何信息,请在下面的我的虽则过程中告知:
(@ 表示我们在@符号之后或在@符号处开始字符串
^ \ S 表示在@
$)表示排除/ n或换行符并在此结束
答案 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