如何使用python正则表达式拆分电子邮件?

如何使用python正则表达式拆分电子邮件?,python,regex,string,Python,Regex,String,我正在尝试分离电子邮件中“+”符号后的值。例如,如果我有“某物”+company@gmail.com,我想得到你公司的价值。似乎+符号把正则表达式搞得一团糟,我不知道该怎么办 以下是我使用re编写的内容: re.findall(r'something+(.*?)@',st) 您的regexp的问题是+是一个特殊字符,意思是“重复上一个字符一次或多次”,在您的情况下,它将匹配g一次,然后(.*)将匹配文本+ 解决方案是通过在\前面加一个\来转义+: >>> email = 's

我正在尝试分离电子邮件中“+”符号后的值。例如,如果我有“某物”+company@gmail.com,我想得到你公司的价值。似乎+符号把正则表达式搞得一团糟,我不知道该怎么办

以下是我使用re编写的内容:

re.findall(r'something+(.*?)@',st)

您的regexp的问题是
+
是一个特殊字符,意思是“重复上一个字符一次或多次”,在您的情况下,它将匹配
g
一次,然后
(.*)
将匹配文本
+

解决方案是通过在
\
前面加一个
\
来转义
+

>>> email = 'something+company@gmail.com'
>>> re.findall(r'something\+(.*?)@', email)
['company']

话虽如此,这里并不需要正则表达式

您的目标是获取第一个
+
和第一个
@
之间的所有文本,您可以使用:

>>> email = 'something+company@gmail.com'
>>> email[email.find('+')+1:email.find('@')]
'company'
请注意,如果没有
+
@
,此代码将给出意外的结果,因此您可能需要对此添加检查(例如,如果电子邮件中的“+”…)


此外,您实际上可以在电子邮件中引用
@
等,因此这不是100%符合RFC的。然而,上一次我检查了许多MTA和电子邮件客户端都不支持这一点,所以你不必担心这一点。

你的regexp的问题是,
+
是一个特殊字符,意思是“重复上一个字符一次或多次”,在你的情况下,它会匹配
g
一次,然后
(.*)
将匹配文本
+

解决方案是通过在
\
前面加一个
\
来转义
+

>>> email = 'something+company@gmail.com'
>>> re.findall(r'something\+(.*?)@', email)
['company']

话虽如此,这里并不需要正则表达式

您的目标是获取第一个
+
和第一个
@
之间的所有文本,您可以使用:

>>> email = 'something+company@gmail.com'
>>> email[email.find('+')+1:email.find('@')]
'company'
请注意,如果没有
+
@
,此代码将给出意外的结果,因此您可能需要对此添加检查(例如,如果电子邮件中的“+”…)


此外,您实际上可以在电子邮件中引用
@
等,因此这不是100%符合RFC的。然而,上一次我检查了很多MTA和电子邮件客户端都不支持这一点,所以这其实并不需要担心。

+
在定义正则表达式时充当特殊字符(重复运算符)。您需要
\
来转义它:

>>> st = "something+company@gmail.com"
>>> re.findall(r'something\+(.*?)@', st)
["company"]

+
在定义正则表达式时起到特殊字符(重复运算符)的作用。您需要
\
来转义它:

>>> st = "something+company@gmail.com"
>>> re.findall(r'something\+(.*?)@', st)
["company"]

为什么不使用split?您尝试过哪个正则表达式字符串?请显示您的代码。re.findall(r'something++(.*?@),st)请参阅,为什么不使用split?您尝试过哪个正则表达式字符串?请显示您的代码。re.findall(r'something++(.*?@),st)请查看,以及通过
电子邮件.split(“@”)[0]发现了什么问题。split(“+”[-1]
?没有类似的内容@OzgurVatansever。我会考虑使用<代码>查找< /代码>更可读,但这完全是主观判断。是电子邮件。拆分(“@”)[0 ]。拆分(“+”)[-1 ]工作,但它可以通过RE完成吗?是的,我已经更新了我的答案杰克。不过,我认为使用regexp不是一个好的解决方案。正如你发现的,它们可能很难理解和调试。是的,我同意。我只是在练习,但很好奇。谢谢你的输入,伙计。有什么问题吗?用
电子邮件。拆分(“@”)[0]。拆分(“+”[-1]
?没有类似的@OzgurVatansever。我会考虑使用<代码>查找< /代码>更可读,但这完全是主观判断。是电子邮件。拆分(“@”)[0 ]。拆分(“+”)[-1 ]工作,但它可以通过RE完成吗?是的,我已经更新了我的答案杰克。不过,我认为使用regexp不是一个好的解决方案。正如你发现的,它们可能很难理解和调试。是的,我同意。我只是在练习,但很好奇。谢谢你的意见,伙计。