【问题标题】:Clean string to get Email with Regex [closed]清理字符串以使用正则表达式获取电子邮件 [关闭]
【发布时间】:2014-09-02 22:37:01
【问题描述】:

我有一个从页面中提取电子邮件地址的 ruby​​ 代码。我的代码输出电子邮件地址,但也捕获其他文本。

我想从这个字符串中提取实际的电子邮件。有时,该字符串会包含一个 mailto,有时则不会。我试图通过使用拆分来获取出现在@ 之前的单个单词,以及出现在@ 之后的任何单词,但是我遇到了麻烦。有任何想法吗?谢谢!

href="mailto:someonesname@domain.rr.com"> |  Email</a></td>

【问题讨论】:

标签: ruby regex


【解决方案1】:

使用预先构建的东西:

require 'uri'

addresses = URI.extract(<<EOT, :mailto)
this is some text. mailto:foo@bar.com and more text
and some more http://foo@bar.com text
href="mailto:someonesname@domain.rr.com"> |  Email</a></td>
EOT
addresses # => ["mailto:foo@bar.com", "mailto:someonesname@domain.rr.com"]

URI 带有 Ruby,用于解析 URI 的模式已经过很好的测试。它不是防弹的,但效果很好。如果您收到误报,您可以使用 selectrejectgrep 块过滤掉返回的不需要的条目。

如果您不能指望拥有mailto:,问题就会变得更加困难,因为电子邮件地址不容易解析;他们有太多的变化。这个问题类似于使用模式验证电子邮件地址,因为地址的格式变化太大。 “Using a regular expression to validate an email address”和“JavaScript Email Validation when there are (soon to be) 1000's of TLD's?”是阅读更多信息的好书。

【讨论】:

    【解决方案2】:

    这应该也可以很好地工作,但不会考虑 invalid 电子邮件格式 - 它只会根据您的两个用例提取电子邮件地址。

    string[/[^\"\:](\w+@.*)(?=\")/]
    

    【讨论】:

      【解决方案3】:

      这应该可行

      inputstring[/href="[^"]+"/][6 .. -2].gsub("mailto:", "")
      

      说明:

      • 获取 href 属性及其内容
      • 删除 href= 和 qoutes
      • 删除mailto:(如果存在)

      示例:

      irb(main):021:0> test = "href=\"mailto:francesco@hawaii.rr.com\"> |  Email DuVin</a></td>"
      => "href=\"mailto:francesco@hawaii.rr.com\"> |  Email DuVin</a></td>"
      irb(main):022:0> test[/href="[^"]+"/][6 .. -2].gsub("mailto:", "")
      => "francesco@hawaii.rr.com"
      irb(main):023:0> test = "href=\"francesco@hawaii.rr.com\"> |  Email DuVin</a></td>"
      => "href=\"francesco@hawaii.rr.com\"> |  Email DuVin</a></td>"
      irb(main):024:0> test[/href="[^"]+"/][6 .. -2].gsub("mailto:", "")
      => "francesco@hawaii.rr.com"
      

      【讨论】:

      • 谢谢,如果字符串中没有mailto,这会起作用吗?
      • 是的,如果有 mailto 或没有 mailto,这将起作用。请参阅问题中的示例,了解它是如何工作的。另外,如果您认为这是正确的答案,请接受它:)
      猜你喜欢
      • 2013-02-09
      • 2020-05-13
      • 2017-07-13
      • 2011-07-01
      • 2011-09-10
      • 1970-01-01
      • 2011-08-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多