2015-12-16 109 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'] 

此主機名而不管該特定行的開始的,即,它是貪婪

相關問題