2012-03-24 115 views
3

我正在尋找匹配正在編寫正則表達式的文本文檔中的電子郵件地址。我想出了這樣的事情對於初學者 -正則表達式匹配字符串末尾

((?:[a-zA-Z]+[\w+\.\-]+[\-a-zA-Z]+))[ ]*((?:@|at))[ ]*(?:[a-zA-Z\.]+) 

我想確保電子郵件地址的末端是一個「EDU」或「COM」。我該怎麼做呢?我正在使用Python。

從我的文本文檔的一些樣品電子郵件地址

alice @ so.edu 
alice at sm.so.edu 
alice @ sm.com 

編輯 -

我想做出改變這個正則表達式只。我的正則表達式適合我的數據中的其他幾個例子。

回答

2
((?:[a-zA-Z]+[\w+\.\-]+[\-a-zA-Z]+))[ ]*((?:@|at))[ ]*(?:[a-zA-Z\.]+)\.(com|edu) 

編輯 「」:

((?:[a-zA-Z]+[\w+\.\-]+[\-a-zA-Z]+))[ ]*((?:@|at))[ ]*(?:[a-zA-Z\.]+) *(\.|dot) *(com|edu) 
+0

爲什麼不需要'$'?因爲 - (?:[a-zA-Z \。] +)\。通過整個域/子域的事情是正確的?只是想確認我是否正確理解了它。 – Dexter 2012-03-24 23:06:10

+2

@mcenly嗯,我沒有看到你的正則表達式或我的'$'。一個'$'只會匹配行尾的電子郵件地址。這可能是也可能不是你想要的。在你的示例文檔中,每行只有一封電子郵件,但我認爲它根本不重要,但是在電子郵件遍佈各處的文本文檔中,'$'只會導致在最後的電子郵件要匹配的行。 – wrongusername 2012-03-24 23:08:32

+0

在行結尾,你的意思是\ n正確,而不是字符串結束?很抱歉打擾你。 – Dexter 2012-03-24 23:10:20

1

首先,請參閱this answer以瞭解如何匹配全部根據RFC822的有效電子郵件地址。

我個人不修改的正則表達式,但使用的正則表達式匹配email.Utils.parseaddr()代替,檢查結果字符串.endswith("edu").endswith("com")。例如。的爲 「點」,而不是:

>>> email.Utils.parseaddr("[email protected]")[1].endswith(".com") 
True 
+0

,就算他有空間和'at',而不是'@'它不工作了電子郵件地址? – wrongusername 2012-03-24 23:05:32

+1

@Kimvais我不能 - 理由是人們爲避免垃圾郵件編寫電子郵件地址有複雜的方式。 – Dexter 2012-03-24 23:09:13

+0

@mcenley - 夠公平的。不過,請注意,有大量的電子郵件地址可以使_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _文件以.edu或.com結尾。 – Kimvais 2012-03-24 23:12:07

相關問題