请考虑以下几行:
我的电子邮件ID是xyz@mail.com
请注意我的邮件ID xyz@mail.com,以便您发送邮件。
从这两句话中,我只需要提取邮件ID。邮件ID可以存在于该行的任何位置。我使用了以下正则表达式:\ s。+ @ {1}。+。com
但对于上述2个句子,它与以下内容相符。这不是我预期的结果。 :
电子邮件ID为xyz@mail.com
请注意我的邮件ID,xyz @mail.com
有人可以帮我吗?
提前致谢。
答案 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
的整个行。
使用\<
匹配单词的开头(如果您的电子邮件地址周围有引号,则需要),然后[^ ]+
匹配除空白之外的所有内容,即它会阻止贪婪的行为正则表达式。
请注意,根据您实际使用的语言(您未指定的语言),符号可能略有不同(或者甚至不可用)。