2017-06-01 98 views
0

随着红宝石如何分裂两个条件之一 - 有3个或更多的空间或选项卡charadter?我试过这个如何分割多个条件?

2.4.0 :003 > line = "a\tb\tc" 
=> "a\tb\tc" 
2.4.0 :004 > line.split(/([[:space:]][[:space:]][[:space:]]+|\t)/) 
=> ["a", "\t", "b", "\t", "c"] 

但是正如你所看到的,制表符本身已经包含在我的结果中了。结果应该是

["a", "b", "c"] 
+0

JFYI,制表符_is_空白,并通过'[匹配:空间:]角色类。 –

回答

2

那么只是split呢?

p "a\tb\tc".split 
# ["a", "b", "c"] 
p "a\tb\tc\t\tc\t\t\t\t\t\t\tc\ts\ts\tt".split 
# ["a", "b", "c", "c", "c", "s", "s", "t"] 

虽然,当有三个3个或多个空格不分裂,这可能工作:

p "a\tb\tc\t\tc\t\t\ t\t\tc\ts\ts\tt".split(/\s{3,}|\t/) 
# => ["a", "b", "c", "c", "t", "c", "s", "s", "t"] 
+0

虽然不起作用。如果我的行是“aa bb cc”,split返回[“aa”,“bb”,“cc”],但由于我只想分割3个或更多空格或选项卡,因此该示例应该产生[“aa bb “,”cc“] – Dave

+0

我编辑了答案,它对你有帮助吗? –

+0

@SebastiánPalma现在很明显错误:'/ \ t * /'匹配器匹配所有内容,尝试使用两个字母的字符串,例如' “ABC”'。 – mudasobwa

1
line = "aa bb cc\tdd" 
line.split /\p{Space}{3,}|\t+/ 
#⇒ ["aa bb", "cc", "dd"]