2012-11-26 65 views
-1

我需要截断从URI接收的一些数据:PARSE ...它充满了html代码和数据,最终的结果就是我所需要的。从html字符串中截断字符串

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

什么是最好的方法来截断字符串中的额外东西,以便我可以将我需要的数据分成变量。

由于提前, 菲利普 [email protected]

+0

请发表您需要更新,以及你需要截断什么具体的整个字符串。空格?标签?等等你的字符串的“垃圾”是什么意思? – 2012-11-26 00:04:50

+1

你转贴你以前的[问题](http://stackoverflow.com/questions/13554328/trying-to-parse-string-from-a-website-that-gives-device-status-with-a-value-在-T)? – 2012-11-26 00:07:18

+0

我想截断它到字符串'Result'> Q8:0'。垃圾只是当前字符串中额外的东西,在我想要的这个字符串之前和之后 –

回答

0

我会建议使用NokogiriResult跨度提取您的价值:

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; 
+0

response.scan(regexp)我需要什么.. –

+0

真的很高兴你整理出来了!请考虑标记它回答 – 2012-11-26 01:48:27

0

删除前夕rything直至并包括<span id=\"Result\">与子第一次调用() 再经过去除一切,包括从什么留下第二次调用子()

假设真实</span>您存储的HTML mystring变量

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

如果你不能总是依靠的是跨越的元素,你可以使用以下命令:

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

第一个只消除了spanid,而不是前面的,因为我想的间距。第二个消除了接近它的所有东西,但留下了上面的几行......这些行中有一些间距没有出现在剪切和粘贴到网站上。在html行,/标题行和

+0

使用了上面的正则表达式....它似乎弥补了空格 –

+0

啊好的,不用担心,当我测试并且工作时,我只把整个字符串放在单引号中。 –