2012-11-26 97 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

啊好的,不用擔心,當我測試並且工作時,我只把整個字符串放在單引號中。 –