2016-08-10 21 views
0

我有一個這樣的字符串:提取值

"<root><some ProdCode=\"40\" ProducerName=\"demo1\" ProdCode=\"40\" Need_Confirmation=\"1\"/><some ProdCode=\"40\" ProducerName=\"demo1\" ProdCode=\"40\" Need_Confirmation=\"1\"/></root>"

我試圖拉從這個字符串是= \之間「內容\」的內容,並把它在一個數組中,如[「40」,「demo1」,「40」,「1」,40 ......]

+0

你有什麼事這麼遠嗎? – lcguida

回答

2

您應該使用:scan按照正則表達式模式選擇元素。然後刪除轉義字符。

string.scan(/"[^"]+"/).map { |element| element.delete('\\"') } 

說明圖案的:

  1. / - 正則表達式開始
  2. " - 第一個字符應爲"
  3. [^"]+ - 下一個應該是除了"任何炭。 +牌子上寫着這樣的字符數應至少爲1
  4. " - 接下來應該是再次"
  5. / - 正則表達式結束

所以string.scan(/"[^"]+"/)將返回:

["\"40\"", "\"demo1\"", "\"40\"", "\"1\"", "\"40\"", "\"demo1\"", "\"40\"", "\"1\""] 

然後我們可以使用:delete方法刪除\"

方便的工具來構建正則表達式是http://rubular.com/

+0

感謝解決它的工作。 –

+0

當內容爲空時,即「\」,則表示正則表達式正在中斷並給出無效結果。 –

+1

可以通過在捕獲組中添加'[^] +'來簡化:'string.scan(/「([^」] +)「/)。flatten'。 –

0

當你的字符串是這樣簡單的時候,你可以使用scan + :

result = html.scan(/ ProdCode =「\ d +?」/)

如果它更復雜,可以使用像nokogiri或oga這樣的html解析器。

+0

我用nokogiri解析,但由於數據是巨大的獲取內存分配錯誤。 –

+0

在這種情況下,您可以嘗試使用nokigiris工具來解析流,而不是加載整個xml文件(如果可能的話)。 – slowjack2k

+0

感謝寶貴的信息。 –