如何从这个字符串中提取电子邮件地址?

时间:2012-01-23 14:16:10

标签: ruby regex string

以下是两种可能的电子邮件字符串方案:

email = "Joe Schmoe <joe@example.com>"
email = "joe@example.com"

我始终只 想要joe@example.com

那么正则表达式或方法会对两种情况产生什么影响呢?

4 个答案:

答案 0 :(得分:3)

这会传递你的例子:

def find_email(string)
  string[/<([^>]*)>$/, 1] || string
end

find_email "Joe Schmoe <joe@example.com>" # => "joe@example.com"
find_email "joe@example.com"              # => "joe@example.com"

答案 1 :(得分:2)

如果你知道你的电子邮件总是在< >,那么你可以用一个子字符串作为起始和结束索引。

答案 2 :(得分:2)

如果这些是唯一的两种格式,请不要使用正则表达式。只需使用简单的字符串解析。如果您找到“<>”对,则从它们之间拉出电子邮件地址,如果您没有找到这些字符,请将整个字符串视为电子邮件地址。

当你需要它们时,正则表达式很棒,但是如果你有非常简单的模式,那么加载和解析正则表达式并使用它进行处理的开销将远远高于简单的字符串操作。 加载除了语言中非常核心的额外库,几乎总是比走另一条路线更快。

答案 3 :(得分:0)

如果您愿意加载额外的库,这已经在TMail gem中解决了: http://lindsaar.net/2008/4/13/tip-5-cleaning-up-an-verifying-an-email-address-with-ruby-on-rails

TMail::Address.parse('Mikel A. <spam@lindsaar.net>').spec
=> "spam@lindsaar.net"