我知道一点正则表达式,但不会发生变化。从以下html中获取数字的最佳方法是什么? (我想有32个返回)。在这个可怕的html页面中,宽度,行跨度和大小的值都是不同的。任何帮助?红宝石正则表达式帮助
<td width=14 rowspan=2 align=right><font size=2 face="helvetica">32</font></td>
我知道一点正则表达式,但不会发生变化。从以下html中获取数字的最佳方法是什么? (我想有32个返回)。在这个可怕的html页面中,宽度,行跨度和大小的值都是不同的。任何帮助?红宝石正则表达式帮助
<td width=14 rowspan=2 align=right><font size=2 face="helvetica">32</font></td>
如何
>(\d+)<
或者,如果你拼命想要避免使用捕获组都:
(?<=>)\d+(?=<)
这将返回> 32 <但我想我可以只是做string.match(/>(\ d +))match(/ \ d + /) – bunnyBEARZ 2010-03-14 01:57:07
@bun:那么,你会发现'32'第一个捕获小组......我编辑了答案,包括一个不需要该小组的例子。 – Joey 2010-03-14 01:59:23
太棒了,非常感谢。 – bunnyBEARZ 2010-03-14 02:05:23
请,自己动手做赞成:
#!/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内容比长期更容易出错。 – 2010-03-14 07:31:13
最好的方法是使用解析器而不是正则表达式。 :-) – Erik 2010-03-14 01:52:30
@Erik:原则上是的,但对于快速和肮脏的屏幕扫描正则表达式通常是一个可行的工具。 – Joey 2010-03-14 01:55:11
我会使用解析器,但HTML格式太差。 – bunnyBEARZ 2010-03-14 02:02:26