我正在尝试从电子邮件地址中提取域名
domain = re.search('(@^\S$)', email)
我想匹配除换行符以外的任何非空格字符。但是,我的变量没有返回任何内容,请在下面对我的过程提出建议:
发布于 2018-06-26 02:50:09
当前的正则表达式匹配@
,后跟行首,后跟一个非空格字符,最后是输入。(我假设您已经在实际代码中正确地转义了字符串的反斜杠。)
您要做的是匹配@
之后的位置,然后是任意数量的非空格字符,然后是输入的末尾:
domain = re.search(r"(?<=@)(\S+$)", email)
在这里,(?<=@)
是一个后视器,它测试前面的一个或多个字符是否与括号中的内容匹配;\S+
是否与一个或多个非空格字符匹配;$
是否与行尾匹配。
另一个不需要正则表达式的选项是:
domain = email.split("@")[1]
发布于 2018-06-26 03:04:00
^
元字符与字符串的开头匹配,因此将其放在模式开头以外的任何位置都不会匹配任何内容。
此外,\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
https://stackoverflow.com/questions/51029753
复制相似问题