python 正则获取邮箱地址的第一部分

21 投票
14 回答
60041 浏览
提问于 2025-04-17 17:55

我对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]

撰写回答