【问题标题】:How to split a string based on multiple criteria in Ruby如何在 Ruby 中根据多个条件拆分字符串
【发布时间】:2016-07-16 19:46:32
【问题描述】:

我的 Ruby 程序有以下问题:

def prompt(*input)
  print *input
  gets.strip()
end

def what_up(greeting, bros)
  bros.each { |bro| puts "What up #{bro}!"}
end

friends = (prompt "List all of your friends, separate them by commas!").split(HELP)

what_up("What up", friends)

我想用逗号分割输入的字符串;但是,由于用户输入的差异,我希望能够基于“,”或“,”进行拆分

我能找到的所有内容都在谈论诸如 /\s| 之类的语法,/ 等;但是,这种语法似乎没有考虑引号中的任何内容。我也尝试使用 /\W/ ,它将字符串拆分为单词和空格数组。我可以使用它,但不知道如何摆脱数组中的“”,如下所示:

["Hello", " ", "Great", " ", "World"] 

变成了

["Hello", "Great", "World"]

【问题讨论】:

    标签: ruby split


    【解决方案1】:

    您可以拒绝结果数组中的任何空字符串,以下对我有用:

    "hurp,durp, foo, bar,baz".split(/\W/).reject(&:empty?) # => ["hurp", "durp", "foo", "bar", "baz"]
    

    【讨论】:

      【解决方案2】:

      这应该可行:

      "Foo,bar, foo,  bar".split(",").map(&:strip) # => ["Foo", "bar", "foo", "bar"]
      

      【讨论】:

        【解决方案3】:
        str = "Humpty,  Dumpty,sat on a     wall"
        
        str.split(/,\s*/) 
          #=> ["Humpty", "Dumpty", "sat on a", "wall"]
        

        这个正则表达式(“regex”)的意思是,“匹配一个逗号后跟零个或多个 (*) 空白字符 (\s)”(这里只是空格)。

        见Regexp。

        【讨论】:

        • 这正是我想要的!完美运行!我对括号内使用的所有这些速记都不熟悉。您能否链接到有助于解释这些及其语法的网站?或者解释一下 \s* 以及它在做什么?
        • 正则表达式 ("regex") 读取,“匹配逗号后跟零个或多个 (*) 空白字符 (\s)”(这里只是空格)。见Regexp。
        • @Coatless,请不要仅仅为了强加您对风格的偏好而编辑答案。首先,您移动了我的句子“This regular...”,使它出现在开头,在它所指的正则表达式被定义之前。这对我来说毫无意义。
        • @CarySwoveland 原样,解释在评论中,它出现在低质量的帖子删除队列中。由于解释很普遍,我将其添加到帖子中以避免它再次出现。很抱歉把它放在上面和下面。
        猜你喜欢
        • 2021-07-21
        • 1970-01-01
        • 1970-01-01
        • 2013-10-19
        • 1970-01-01
        • 2021-04-01
        • 2014-10-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多