嘿,你在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"]
答案 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"]