Ruby nokogiri解析正则表达式

时间:2016-01-07 22:56:42

标签: ruby regex

我正在使用以下代码解析网页:

@doc = Nokogiri::HTML(open(url))
links = @doc.css("span[class='reviewCount']").css('a')
links.each do |link| 
  link["href"]
end

我得到一个href参考列表如下

/Restaurant_Review-g187147-d719052-Reviews-Epicure-City_Ile_de_France.html#REVIEWS
/Restaurant_Review-g187147-d6958622-Reviews-Seb_on-City_Ile_de_France.html#REVIEWS
/Restaurant_Review-g187147-d8766885-Reviews-Le_cherine-City_Ile_de_France.html#REVIEWS

我正在尝试获取Reviews-和-City

之间的子字符串
Epicure
Seb_on
Le_cherine

替换

  link["href"]

通过

  link["href"][[/\"Reviews-"(.*?)"-City"/, 1]

但我找不到合适的语法。谁能帮我找到正确的语法?感谢。

1 个答案:

答案 0 :(得分:0)

/Reviews-((.)+)-City/是提取" WHATIWANT"的正则表达式。来自" XX-Reviews-WHATIWANT-City-XX"

 "XX-Reviews-WHATIWANT-City"[/Reviews-((.)+)-City/, 1]
 #=> "WHATIWANT"

完整解决方案:

require 'nokogiri'

html = <<-EOF
<span class="reviewCount">
<a href="XX-Reviews-WHATIWANT-City-XX" target="_blank" onclick="XX;">1,361 reviews</a>
</span>
EOF

doc = Nokogiri::HTML(html)
doc.xpath("//span[@class='reviewCount']/a").each do |node|
  puts node.attribute("href").to_s[/Reviews-((.)+)-City/, 1]
end