python 正则获取邮箱地址的第一部分
我对Python和正则表达式还很陌生,想知道如何提取电子邮件地址中“@”之前的部分。比如,如果有:
s='xjhgjg876896@domain.com'
我希望正则表达式的结果能够处理各种类型的电子邮件地址,包括数字等:
xjhgjg876896
我明白正则表达式的基本概念——也就是我需要扫描到“@”符号,然后保存这个结果——但我不太确定如何在Python中实现这个。
谢谢你的时间。
14 个回答
4
你需要使用正确的RFC5322解析器。
"@@@@@"@example.com
是一个有效的电子邮件地址,从语义上讲,地址的本地部分("@@@@@"
)和它的用户名(@@@@@
)是不同的。
从Python 3.6开始,你可以使用 email.headerregistry
:
from email.headerregistry import Address
s='xjhgjg876896@domain.com'
Address(addr_spec=s).username # => 'xjhgjg876896'
4
正如其他人提到的,使用 split
方法会是更好的解决方案。
如果你真的想用 regex
(正则表达式),那么这个方法应该可以用:
import re
regexStr = r'^([^@]+)@[^@]+$'
emailStr = 'foo@bar.baz'
matchobj = re.search(regexStr, emailStr)
if not matchobj is None:
print matchobj.group(1)
else:
print "Did not match"
它会输出
foo
注意:这个方法只适用于格式为 SOMEONE@SOMETHING.TLD
的邮箱。如果你想匹配像 NAME<SOMEONE@SOMETHING.TLD>
这样的邮箱格式,你需要调整一下正则表达式。
70
你只需要使用字符串的 split
方法就可以了:
s.split("@")[0]