【问题标题】:extract all email addresses from some .txt documents using ruby使用 ruby​​ 从一些 .txt 文档中提取所有电子邮件地址
【发布时间】:2010-07-07 11:54:36
【问题描述】:

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

  1. a@abc.com
  2. {a, b, c}@abc.edu
  3. 一些其他格式,包括一些@ 符号。

我选择 ruby​​ 作为我的第一语言来编写这个程序,但我不知道如何编写正则表达式。有人会帮助我吗?谢谢!

【问题讨论】:

标签: ruby regex


【解决方案1】:

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

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

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

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

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

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

【讨论】:

  • 保重.. 它不会接受邮件地址中的“-”
  • 也不接受“.” @ 符号之前。所以 fo.o@bar.com => o@bar.com
  • 这是对 Ikbear 关于他/她的具体要求的问题的回答。它不是关于如何将电子邮件地址与正则表达式匹配的通用指南。如果您在regular-expressions.info/email.html 阅读我的文章,那么您将了解到总会有取舍。
【解决方案2】:

看看这个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

【讨论】:

    【解决方案3】:

    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
    

    【讨论】:

    • 这个正则表达式不符合 Ikbear 的要求 #2。它还匹配 john@aol...com 并且无法匹配新 TLD 上的电子邮件,例如长度超过 6 个字符的 .solutions。如果这个正则表达式满足您的需求,那很好,但不是这个问题的答案,也不是 2017 年一个好的通用电子邮件正则表达式。
    猜你喜欢
    • 2011-01-20
    • 2014-05-26
    • 2016-04-12
    • 2011-08-24
    • 2015-12-28
    • 2014-03-23
    • 2016-01-14
    • 1970-01-01
    相关资源
    最近更新 更多