簡體   English   中英

用ruby將字符串拆分為數組

[英]Split string to array with ruby

我有以下字符串: "how to \\"split string\\" to \\"following array\\""如何將字符串拆分為以下數組 )。

我想得到以下數組:

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

我嘗試了split(' ')但結果是:

["how", "to", "\"split", "string\"", "to", "\"following", "array\""]
x.split('"').reject(&:empty?).flat_map do |y|
  y.start_with?(' ') || y.end_with?(' ') ? y.split : y
end

說明:

  • split('"')將以不帶引號的字符串具有前導或尾隨空格而帶引號的字符串沒有空格的方式對字符串進行分區。
  • 以下flat_map僅在單個字符串屬於非引用類別flat_map將其按空格進一步拆分。
  • 請注意,如果有兩個連續的帶引號的字符串,則它們之間的空格將是第一個空格之后的字符串,而第二個空格將完全消失。 又名:

     'foo "bar" "baz"'.split('"') # => ["foo ", "bar", " ", "baz"] ' '.split # => [] 
  • 如果我們以帶引號的字符串開頭,則需要reject(&:empty?)

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

x作為字符串:

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

當對引號進行拆分時,可以肯定地知道數組中的每個字符串都去了:不帶引號,帶引號,不帶引號,帶引號,不帶引號等。

如果將這些分組成對,則可以得到以下兩種情況之一:

  1. [ "non-quoted", "quoted" ]
  2. [ "non-quoted", nil ] (僅用於不平衡字符串的最后一對)

例如1,我們拆分nq並附加q
例如2,我們拆分nq並丟棄q
即: a = n.split; (a << q if q) || q a = n.split; (a << q if q) || q

然后我們將所有對配對備份( flat_map的平坦部分)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM