如何在电子邮件后删除字符串中的字符

时间:2017-03-28 22:54:50

标签: ruby nokogiri

我使用此代码列出HTML页面中的电子邮件地址。

require 'nokogiri'

selector = "//a[starts-with(@href, \"mailto:\")]/@href"

doc = Nokogiri::HTML.parse File.read 'in.rb'

nodes = doc.xpath selector

addresses = nodes.collect {|n| n.value[7..-1]}

puts addresses

这是示例代码I解析:

<a href="mailto:joe@example.com?subject=My Business Is Dying">

但我获得的不仅仅是电子邮件地址。我在结果中得到了这个:

joe@example.com?subject=My Business Is Dying

如何在问号后删除所有内容,以便它只是电子邮件地址?

2 个答案:

答案 0 :(得分:1)

您可以随时切断?字符后的任何内容:

addresses.map! do |address|
  address.sub(/\?.*/, '')
end

答案 1 :(得分:0)

我可能会使用以下两种中的一种:

str = 'joe@example.com?subject=My Business Is Dying'

str.split('?').first # => "joe@example.com"
str[/^[^?]+/] # => "joe@example.com"

第二个是String's [] (slice) method中嵌入的简单正则表达式。该模式基本上是“从一开始就抓住所有东西直到问号”。

就速度而言,它们是等价的。我可能会使用第一个,因为它更容易阅读。