使用ruby从某些.txt文档中提取所有电子邮件地址

时间:2010-07-07 11:54:36

标签: ruby regex

我必须从某些.txt文档中提取所有电子邮件地址。这些电子邮件可能具有以下格式:

  1. a@abc.com
  2. {a, b, c}@abc.edu
  3. 其他一些格式,包括一些@标志。
  4. 我选择ruby作为我的第一语言来编写这个程序,但我不知道如何编写正则表达式。有人会帮助我吗?谢谢!

3 个答案:

答案 0 :(得分:6)

根据.txt文档的性质,您不必使用其中一个尝试验证电子邮件地址的复杂正则表达式。你不是要试图验证任何东西。你只是想抓住已有的东西。一般来说,获取已有内容的正则表达式比需要验证输入的正则表达式简单得多。

一个重要的问题是.txt文档是否包含不属于您要提取的电子邮件地址的@符号。

此正则表达式处理您的前两个要求:

\w+@[\w.-]+|\{(?:\w+, *)+\w+\}@[\w.-]+

或者,如果您想允许包含@符号的任何非空格字符序列加上您的第二个要求(具有空格):

\S+@\S+|\{(?:\w+, *)+\w+\}@[\w.-]+

答案 1 :(得分:2)

请看一下in-depth analysis

Upshot使用此正则表达式:

/^([\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

答案 2 :(得分:0)

在满足我需求的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