2012-03-24 104 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