Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby正则表达式帮助_Ruby_Regex - Fatal编程技术网

Ruby正则表达式帮助

Ruby正则表达式帮助,ruby,regex,Ruby,Regex,我懂一点regex,但不懂mutch。从下面的html中获取数字的最佳方法是什么。我想把32块钱还回来。在这个可怕的html页面中,宽度、行跨度和大小的值都是不同的。有什么帮助吗 <td width=14 rowspan=2 align=right><font size=2 face="helvetica">32</font></td> 怎么样 >(\d+)< 或者,如果您非常想避免使用捕获组: (?<=>)\d+(?=

我懂一点regex,但不懂mutch。从下面的html中获取数字的最佳方法是什么。我想把32块钱还回来。在这个可怕的html页面中,宽度、行跨度和大小的值都是不同的。有什么帮助吗

<td width=14 rowspan=2 align=right><font size=2 face="helvetica">32</font></td>
怎么样

>(\d+)<
或者,如果您非常想避免使用捕获组:

(?<=>)\d+(?=<)
怎么样

>(\d+)<
或者,如果您非常想避免使用捕获组:

(?<=>)\d+(?=<)
可能是

可能是


请帮自己一个忙:

#!/usr/bin/env ruby
require 'nokogiri'

require 'test/unit'
class TestExtraction < Test::Unit::TestCase
  def test_that_it_extracts_the_number_correctly
    doc = Nokogiri::HTML('<td width=14 rowspan=2 align=right><font size=2 face="helvetica">32</font></td>')
    assert_equal [32], (doc / '//td/font').map {|el| el.text.to_i }
  end
end

请帮自己一个忙:

#!/usr/bin/env ruby
require 'nokogiri'

require 'test/unit'
class TestExtraction < Test::Unit::TestCase
  def test_that_it_extracts_the_number_correctly
    doc = Nokogiri::HTML('<td width=14 rowspan=2 align=right><font size=2 face="helvetica">32</font></td>')
    assert_equal [32], (doc / '//td/font').map {|el| el.text.to_i }
  end
end

最好的方法是使用解析器而不是正则表达式:-@埃里克:原则上是的,但是对于快速和肮脏的屏幕抓取来说,正则表达式通常是一个可行的工具。我会使用解析器,但是HTML格式太差了。好吧,你的例子当然是有效的,尽管:-。HTML解析器通常用于处理错误的标记。最好的方法是使用解析器而不是正则表达式-@埃里克:原则上是的,但是对于快速和肮脏的屏幕抓取来说,正则表达式通常是一个可行的工具。我会使用解析器,但是HTML格式太差了。好吧,你的例子当然是有效的,尽管:-。HTML解析器通常被设计用来处理错误的标记。这将返回>32<,但我想我可以只做string.match/>\d+@bun:嗯,你会在第一个捕获组中找到32。。。我对答案进行了编辑,以包含一个不需要该组的示例。这将返回>32<,但我想我可以只做string.match/>\d+@bun:好吧,您将在第一个捕获组中找到32。。。我对答案进行了编辑,以包含一个不需要该组的示例。这肯定会匹配上面的字符串,但不会提取32。如果Ruby的regexp synatx是从Perl借用的,那么您需要将\d+放在括号中。然后使用match[1]这肯定会匹配上面的字符串,但不会提取32。如果Ruby的regexp synatx是从Perl借用的,那么需要将\d+放在括号中。然后使用匹配[1]我同意。从长远来看,使用正则表达式搜索HTML内容比使用解析器更容易出错。我同意。从长远来看,与使用解析器相比,使用正则表达式查找HTML内容更容易出错。