如何拆分多个空格或制表符?

时间:2017-03-08 22:53:05

标签: ruby regex string split whitespace

嘿,你在Ruby中如何拆分多个空格或制表符?我试过这个

2.4.0 :003 > a = "b\tc\td"
 => "b\tc\td" 
2.4.0 :005 > a.strip.split(/([[:space:]][[:space:]]+|\t)/)
 => ["b", "\t", "c", "\t", "d"]

但是标签本身变成了令牌,而这不是我想要的。以上应该返回

["b", "c", "d"]

3 个答案:

答案 0 :(得分:2)

这是因为您使用的组是捕获组。见split reference

  

如果 pattern 包含组,则相应的匹配也将在数组中返回。

使用non-capturing group(仅用于分组模式)以避免将匹配的字符串添加到结果数组中:

a.strip.split(/(?:[[:space:]][[:space:]]+|\t)/)
                ^^

答案 1 :(得分:0)

在这种情况下,您可以使用在正则表达式中包含空格和制表符的字符类:

"b\tc\td".split /[ \t]+/

如果要拆分任何空格,还可以使用匹配所有空格字符的[\s]+表示法。

答案 2 :(得分:0)

有一些比公认的解决方案更简单的方法:

a.strip.split("\s")

a.split("\s")

'\ s'将照顾多个空格字符。

对于上述情况,您可以简单地使用:

a = "b\tc\td" 
a.split("\t")    #=> ["b", "c", "d"]

或用于多个空格和制表符的组合

a.gsub("\t", " ").split("\s")     #=> ["b", "c", "d"]