考虑以下几行:
我的电子邮件 ID 是 xyz@mail.com
记下我的邮件 ID,xyz@mail.com,以便您发送邮件。
从这 2 句话中,我只需要提取邮件 ID。邮件 ID 可以存在于该行的任何位置。我使用了以下正则表达式:\s.+@{1}.+.com
但是对于上面的 2 个句子,它与以下内容匹配。这不是我的预期结果。:
电子邮件 ID 是 xyz@mail.com
记下我的邮件 ID,xyz@mail.com
谁可以帮我这个事?
提前致谢。
一些简单的例子
(.*)(\s)(.+@{1}.+.com)
所以第一部分(.*)
和第 2部分(\s)
将在搜索电子邮件 3 之前出现最后一个空格(.+@{1}.+.com)
测试:
用记事本++替换
查找内容: (.*)(\s)(.+@{1}.+.com)
替换为: +\1+\2+\3+
输入:我的电子邮件 id 是 xyz@mail.com
结果: +我的电子邮件ID是+ +xyz@mail.com+
这样您就知道\3
包含您的电子邮件
缺点:
如果将电子邮件作为第一个单词放在行中,则此表达式将不起作用
如果电子邮件前面有不同于空格的内容,则此符号将包含在电子邮件地址中(这是询问电子邮件正则表达式设计的结果)
玩不同的案例,找到适合您的最佳解决方案。
使用来自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'
您可以使用以下正则表达式:
\<[^ ]+@{1}.+.com
您的建议的问题是,正则表达式'是贪婪的。.+
捕获它可以找到的最大匹配项,即.com
.
与\<
您匹配一个单词的开头(如果您的电子邮件地址周围有引号,则需要),然后[^ ]+
匹配除空格之外的所有内容,即它可以防止正则表达式的贪婪行为。
请注意,根据您实际使用的语言(您未指定),符号可能会有所不同(甚至不可用)。