我需要截断从 URI:PARSE 接收到的一些数据......它充满了 html 代码和数据,最后的结果就是我需要的。
这是字符串(缩写)' junk "Result">Q8:0; 垃圾
截断字符串中多余内容的最佳方法是什么,以便我可以将所需的数据拆分为变量。
在此先感谢 Philip pabbott@cpak.com
我建议使用Nokogiri
从Result
跨度中提取您的价值:
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&f=DeviceValue&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;
删除第一次调用 sub() 之前的<span id=\"Result\">
所有内容,包括</span>
第二次调用 sub() 之后的所有内容
假设您将 html 存储在变量 mystring 中
result = mystring.sub(/.*<span id=\"Result\">/,'').sub(/<\/span>.*/,'')
如果您不能总是依赖跨度元素,您可以使用以下内容:
result = mystring.sub(/.*id=\"Result\">/,'').sub(/<\/.*/,'')