2017-02-17 84 views
0

我有字符串:"how to \"split string\" to \"following array\""如何「拆分字符串」到「以下數組」)。分割字符串與紅寶石

我想下面的數組:

["how", "to", "split string", "to", "following array"] 

我試圖split(' ')但結果是:

["how", "to", "\"split", "string\"", "to", "\"following", "array\""] 

回答

2
x.split('"').reject(&:empty?).flat_map do |y| 
    y.start_with?(' ') || y.end_with?(' ') ? y.split : y 
end 

說明:

  • split('"')將分割字符串以不引號的方式字符串將具有前導空間或尾隨空間,並且引用的空間不會。
  • 以下flat_map將進一步拆分單個字符串的空間,只要它屬於非引用類別。
  • 請注意,如果有兩個連續引用的字符串,它們之間的空格將是它自己的字符串在第一個空格之後,並且在第二個空格之後將完全消失。又名:

    'foo "bar" "baz"'.split('"') # => ["foo ", "bar", " ", "baz"] 
    ' '.split # => [] 
    
  • reject(&:empty?)是必要的情況下,我們開始用帶引號的字符串作爲

    '"foo"'.split('"') # => ["", "foo"] 
    
0

隨着x爲您的字符串:

x.split(?").each_slice(2).flat_map{|n, q| a = n.split; (a << q if q) || a }

當你分開報價,你肯定知道每個str荷蘭國際集團在陣列中有云:無報價,報價,無報價,報價,無報價等..

如果我們將這些分成兩人一組,然後我們得到以下兩種情況之一:

  1. [ "non-quoted", "quoted" ]
  2. [ "non-quoted", nil ](僅有史以來最後一對不平衡字符串)

例如1,我們分裂NQ和追加q
例如如圖2所示,我們分離NQ並丟棄q
即:a = n.split; (a << q if q) || q

然後我們加入所有對備份(的flat_map平坦部分)