从一行中提取电子邮件ID

时间:2013-10-27 08:55:20

标签: java regex

请考虑以下几行:

  1. 我的电子邮件ID是xyz@mail.com

  2. 请注意我的邮件ID xyz@mail.com,以便您发送邮件。

  3. 从这两句话中,我只需要提取邮件ID。邮件ID可以存在于该行的任何位置。我使用了以下正则表达式:\ s。+ @ {1}。+。com

    但对于上述2个句子,它与以下内容相符。这不是我预期的结果。 :

    1. 电子邮件ID为xyz@mail.com

    2. 请注意我的邮件ID,xyz @mail.com

    3. 有人可以帮我吗?

      提前致谢。

4 个答案:

答案 0 :(得分:1)

尝试使用以下正则表达式来匹配几乎所有类型的电子邮件地址

\b[-0-9a-zA-Z.+_]+@[-0-9a-zA-Z.+_]+\.[a-zA-Z]{2,4}\b

使用说明检查regex101 demo

答案 1 :(得分:1)

一些简单的例子

(.*)(\s)(.+@{1}.+.com)

所以第一部分1 (.*)和2 (\s)将在搜索到的电子邮件3 (.+@{1}.+.com)

中发送最后一个空格

测试:

用Notepad ++替换

查找内容:(。*)(\ s)(。+ @ {1}。+。com)

替换为: + \ 1+ \ 2+ \ 3 +

输入:我的电子邮件ID为xyz@mail.com

结果 +我的电子邮件ID为+ +xyz@mail.com+

这样您就知道\3包含您的电子邮件

缺点

如果将电子邮件作为第一个单词排成一行,则此表达式将无效

如果电子邮件的内容与之前的空格不同,则此标志将包含在电子邮件地址中(这是提问者电子邮件正则表达式设计的结果)

使用不同的案例,找到最适合您的解决方案。

答案 2 :(得分:0)

使用http://www.regular-expressions.info/email.html

中RFC 5322的“实用”实现
>>> import re
>>> email = re.compile("[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?")
>>> email.search('My email id is xyz@mail.com').group(0)
'xyz@mail.com'
>>> email.search('Note my mail id, xyz@mail.com, so you can send a mail').group(0)
'xyz@mail.com'

答案 3 :(得分:0)

您可以使用以下正则表达式:

\<[^ ]+@{1}.+.com

你的建议的问题是,正则表达式是贪婪的。 .+抓住了它能找到的最大匹配,这是.com的整个行。

使用\<匹配单词的开头(如果您的电子邮件地址周围有引号,则需要),然后[^ ]+匹配除空白之外的所有内容,即它会阻止贪婪的行为正则表达式。

请注意,根据您实际使用的语言(您未指定的语言),符号可能略有不同(或者甚至不可用)。