2017-02-17 57 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平坦部分)