正则表达式提取部分电子邮件地址

时间:2015-12-16 11:24:03

标签: python regex

我正在尝试使用正则表达式来提取“@”符号和“。”之间的电子邮件地址的一部分。字符。这就是我目前正在做的事情,但无法获得正确的结果。

company = re.findall('^From:.+@(.*).',line)

给我:

['@iupui.edu']

我想摆脱.edu

4 个答案:

答案 0 :(得分:3)

你可以试试这个:

(?<=\@)(.*?)(?=\.)

查看demo

答案 1 :(得分:3)

要匹配正则表达式中的文字Dispose,您需要使用.,因此您的代码应如下所示:

\.

live here

请注意,这将始终与字符串中company = re.findall('^From:.+@(.*)\.',line) # ^ this position was wrong 的最后一次出现匹配,因为.是贪婪的。如果您想匹配 first 出现,则需要从捕获组中排除任何(.*)

.

Regular expression visualization

查看demo

答案 2 :(得分:2)

一个简单的例子是:

>>> import re
>>> re.findall(".*(?<=\@)(.*?)(?=\.)", "From: atc@moo.com")
['moo']
>>> re.findall(".*(?<=\@)(.*?)(?=\.)", "From: atc@moo-hihihi.com")
['moo-hihihi']

无论行的开头如何,都匹配主机名,即 greedy

答案 3 :(得分:1)

你可以拆分并找到:

s = " abc.def@ghi.mn I"
s = s.split("@", 1)[-1]
print(s[:s.find(".")])

或者只是分裂,如果它不总是与你的字符串匹配:

s = s.split("@", 1)[-1].split(".", 1)[0]

如果是,那么发现将是最快的:

i = s.find("@")
s = s[i+1:s.find(".", i)]