2014-07-24 61 views
0

我學會了序列化的錯誤...現在我必須付出代價。在我的數據庫,我有記錄,其中字符串屬性看起來是這樣的:使用REGEX解析串行化數據

"---\n- '0'\n- Tent\n- '0'\n- '0'\n- Sleeping pad\n- '0'\n- '0'\n- '0'\n- '0'\n- '0'\n- '0'\n- '0'\n- '0'\n- '0'\n- '0'\n- '0'\n- '0'\n- '0'\n- '0'\n- '0'\n- '0'\n- '0'\n- '0'\n- '0'\n- '0'\n- '0'\n- '0'\n- '0'\n- '0'\n- '0'\n- '0'\n- '0'\n"

有一種簡單的方法來解析出只有兩個內線的項目?在這種情況下,項目是帳篷和睡墊,但要注意的是,在這些長字符串,可以有任意數量的隱藏物品......

FYI這是Ruby on Rails的4

+0

你有什麼期望的輸出?輸入是你提供的字符串,輸出是「帳篷睡墊」還是什麼? – trainoasis

+0

理想情況下,我希望輸出爲'Tent,Sleeping pad,next item,等等',這樣我就可以轉換爲一個數組,然後可以在它上面運行一個枚舉。 – james

回答

1

好抱歉,沒有偷任何人的風頭,但我真的不知道正則表達式好,所以我不知道在哪裏的把代碼行。最後我用一個純Ruby的方式,雖然,只是:

long_string = "---\n- '0'\n- Tent\n- '0'\n- '0'\n- Sleeping pad\n- '0'\n- '0'\n- '0'\n- '0'\n- '0'\n- '0'\n- '0'\n- '0'\n- '0'\n- '0'\n- '0'\n- '0'\n- '0'\n- '0'\n- '0'\n- '0'\n- '0'\n- '0'\n- '0'\n- '0'\n- '0'\n- '0'\n- '0'\n- '0'\n- '0'\n- '0'\n- '0'\n" 
new_array = long_string.split("\n- ") 
#mimic what the serialization function does, which is splitting up each of the items with the "\n- " thing 

new_array.select! { |t| ("A".."Z").include? t[0] } 
#select only elements of the newly created array where the first character is a capital letter, since it works out that all my items would start with a capital letter 

輸出在這種情況下將=> ["Tent", "Sleeping pad"]

0

使用該條目,你需要下面的字符串來採摘這些字

(?<=^|\\n-\s)([\p{L} ]+?)(?=\\n) 

如果U沒有「懶」,使用這個。

(?<=^|\\n-\s)([a-zA-Z ]+?)(?=\\n) 
+0

嗨,對不起,我該如何使用它?一旦我有'物品'作爲一個對象?我嘗試過'items.split ...',但似乎需要更多信息。謝謝! – james

+1

我不知道Ruby正則表達式,但也許這可以幫助:http://regex101.com/r/rX5jU9/1它的幾乎相同,他的第二個正則表達式(除了非捕獲組添加??)和它作品。不要忘了做一個全球比賽。 – trainoasis

+0

哦 - 在這裏測試它,我編輯的正則表達式找到兩個單詞http://rubular.com/(把你的字符串和我編輯的正則表達式) – trainoasis