2015-12-16 107 views
2

我试图使用正则表达式来提取“@”符号和“。”之间的电子邮件地址部分。字符。这是我目前正在做的,但不能得到正确的结果。提取部分电子邮件地址的正则表达式

company = re.findall('^From:[email protected](.*).',line) 

给我:

['@iupui.edu'] 

我想摆脱的.edu

+3

你检查了吗? https://docs.python.org/2/library/email.html – nhahtdh

+2

点需要在正则表达式中转义 – anubhava

+1

域名通常包含多个点,您是否希望匹配第一个或最后一个点? – Ctx

回答

3

以匹配您的正则表达式字面.,则需要使用\.,所以你的代码应该看起来像这样:

company = re.findall('^From:[email protected](.*)\.',line) 
#        ^this position was wrong 

请参阅live here

请注意,由于(.*)是贪婪的,因此它将始终匹配字符串中最后一次出现的.。如果你想匹配第一出现时,你需要从捕获组排除任何.

company = re.findall('^From:[email protected]([^\.]*)\.',line) 

Regular expression visualization

看到一个demo

3

你可以试试这个:

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

看到一个demo

1

你可以只拆分和发现:

s = " [email protected] 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)] 
2

一个简单的例子是:

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

此主机名而不管该特定行的开始的,即,它是贪婪

相关问题