2017-06-01 127 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"]