【问题标题】:How do I split on multiple white space or tabs?如何拆分多个空格或制表符?
【发布时间】:2017-07-29 17:43:17
【问题描述】:

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

【问题讨论】:

  • 使用\s+ 模式进行拆分功能,将返回您想要的。用法:.split(/\s+/)

标签: ruby regex string split whitespace


【解决方案1】:

这是因为您使用的组是一个正在捕获的组。见split reference

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

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

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

【讨论】:

    【解决方案2】:

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

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

    如果您想在任何空白处进行拆分,您还可以使用[\s]+ 表示法,它匹配所有空白字符。

    【讨论】:

      【解决方案3】:

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

      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"]
      

      【讨论】:

        猜你喜欢
        • 2014-05-02
        • 1970-01-01
        • 2010-12-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-11
        • 2013-09-28
        • 1970-01-01
        相关资源
        最近更新 更多