【发布时间】:2010-07-07 11:54:36
【问题描述】:
我必须从一些 .txt 文档中提取所有电子邮件地址。这些电子邮件可能有以下格式:
a@abc.com{a, b, c}@abc.edu- 一些其他格式,包括一些
@符号。
我选择 ruby 作为我的第一语言来编写这个程序,但我不知道如何编写正则表达式。有人会帮助我吗?谢谢!
【问题讨论】:
-
我正要建议提取所有带有
@的非空格字符序列 - 但它不适用于您的第二个示例。
我必须从一些 .txt 文档中提取所有电子邮件地址。这些电子邮件可能有以下格式:
a@abc.com{a, b, c}@abc.edu@ 符号。我选择 ruby 作为我的第一语言来编写这个程序,但我不知道如何编写正则表达式。有人会帮助我吗?谢谢!
【问题讨论】:
@ 的非空格字符序列 - 但它不适用于您的第二个示例。
根据 .txt 文档的性质,您不必使用尝试验证电子邮件地址的复杂正则表达式之一。你没有试图验证任何东西。你只是想抓住已经存在的东西。一般来说,获取已有内容的正则表达式比需要验证输入的正则表达式简单得多。
一个重要的问题是您的 .txt 文档是否包含不属于您要提取的电子邮件地址的 @ 符号。
此正则表达式处理您的前两个要求:
\w+@[\w.-]+|\{(?:\w+, *)+\w+\}@[\w.-]+
或者,如果您想允许任何包含@符号的非空格字符序列,加上您的第二个要求(包含空格):
\S+@\S+|\{(?:\w+, *)+\w+\}@[\w.-]+
【讨论】:
看看这个in-depth analysis:
结果是使用这个正则表达式:
/^([\w\!\#$\%\&\'\*\+\-\/\=\?\^\`{\|\}\~]+\.)*[\w\!\#$\%\&\'\*\+\-\/\=\?\^\`{\|\}\~]+@((((([a-z0-9]{1}[a-z0-9\-]{0,62}[a-z0-9]{1})|[a-z])\.)+[a-z]{2,6})|(\d{1,3}\.){3}\d{1,3}(\:\d{1,5})?)$/i
【讨论】:
在https://www.shellhacks.com/regex-find-email-addresses-file-grep/ 找到满足我需求的这个:
\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b
【讨论】: