-1

考虑以下几行:

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

  2. 记下我的邮件 ID,xyz@mail.com,以便您发送邮件。

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

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

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

  2. 记下我的邮件 ID,xyz@mail.com

谁可以帮我这个事?

提前致谢。

4

4 回答 4

1

一些简单的例子

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

所以第一部分(.*)和第 2部分(\s)将在搜索电子邮件 3 之前出现最后一个空格(.+@{1}.+.com)

测试:

用记事本++替换

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

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

输入:我的电子邮件 id 是 xyz@mail.com

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

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

缺点

如果将电子邮件作为第一个单词放在行中,则此表达式将不起作用

如果电子邮件前面有不同于空格的内容,则此符号将包含在电子邮件地址中(这是询问电子邮件正则表达式设计的结果)

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

于 2013-10-27T09:18:50.350 回答
1

尝试按照正则表达式匹配几乎所有类型的电子邮件地址

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

检查regex101 演示和解释

于 2013-10-27T09:16:26.447 回答
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'
于 2013-10-27T09:00:36.220 回答
0

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

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

您的建议的问题是,正则表达式'是贪婪的。.+捕获它可以找到的最大匹配项,即.com.

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

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

于 2013-10-27T09:07:27.270 回答