Nokogiri里面的正则表达式数字?

时间:2013-09-24 18:05:19

标签: ruby regex nokogiri

我有这个代码,我需要在整数的“href =”之前添加一个正则表达式:

f = File.open("us.html")
doc = Nokogiri::HTML(f)

ans = doc.css('a[href=]')

puts doc

我尝试过:

ans = doc.css('a[href=\d]

或:

ans = doc.css('a[href="\d"])

但它不起作用。有人可以建议解决方法吗?

2 个答案:

答案 0 :(得分:4)

如果您想使用正则表达式,我相信您必须手动执行此操作。使用CSS或XPath选择器无法完成。

您可以通过迭代元素并将其href属性与正则表达式进行比较来实现。例如:

html = %q{
<html>
  <a href='1'></a>
  <a href='adf'></a>
</html>
}

doc = Nokogiri::HTML(html)
ans = doc.css('a[href]').select{ |e| e['href'] =~ /\d/}
#=> <a href="1"></a>

答案 1 :(得分:2)

您可以在XPath中执行此操作:

require 'nokogiri'

html = %q{
<html>
  <a href='1'></a>
  <a href='adf'></a>
</html>
}

doc = Nokogiri::HTML(html)

puts doc.xpath('//a[@href[number(.) = .]]')
#=> <a href="1"></a>

XPath函数number()执行转换为数字。如果它等于节点本身,则节点一个数字。甚至可以使用不等运算符来检查范围。