从html字符串截断字符串

时间:2012-11-26 00:02:06

标签: ruby rubygems

我需要截断从URI收到的一些数据:PARSE ...它充满了html代码和数据,最后的结果就是我需要的。

这是字符串(缩写)'垃圾“结果”> Q8:0; 垃圾

截断字符串中额外内容的最佳方法是什么,这样我就可以将需要的数据拆分成变量。

提前致谢, 菲利普 pabbott@cpak.com

2 个答案:

答案 0 :(得分:0)

我建议您使用NokogiriResult span:

中提取您的值
require 'nokogiri'

response = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">;
<html xmlns="w3.org/1999/xhtml"><head><title>;
</title></head><body>
<form name="form1" method="post" action="tenHSServer.aspx?t=34&amp;f=DeviceValue&amp;d=R10" id="form1">
<div>
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMTkzNDcxNzcwM2RkM4AHUDZdWZytDdspzLq7+FOXRfQ=" />
</div>
<span id="Result">R10:100;</span>
</form></body>
</html>'

result = nil
if doc = Nokogiri::HTML(response) rescue nil
  if span = doc.css('#Result')
    result = span.text
  end
end

puts result
#=> R10:100;

但是,如果您不能/不想安装Nokogiri,请改用此正则表达式:

result = response.scan(/id=["|']Result["|']>([^<]*)<\//m).flatten.first
puts result
#=> R10:100;

答案 1 :(得分:0)

首次调用sub(),删除<span id=\"Result\">之前的所有内容 然后删除</span>之后的所有内容,并将第二次调用留在sub()

左侧

假设您将html存储在变量mystring

result = mystring.sub(/.*<span id=\"Result\">/,'').sub(/<\/span>.*/,'')

如果您不能总是依赖于跨度元素,则可以使用以下内容:

result = mystring.sub(/.*id=\"Result\">/,'').sub(/<\/.*/,'')