【问题标题】:Chaining array into new split function call将数组链接到新的拆分函数调用中
【发布时间】:2012-01-25 18:38:12
【问题描述】:

我有以下内容,我试图在'.' 上拆分,然后在'-' 上拆分返回的第一部分并返回第一部分的最后一部分。我想返回447

a="cat-vm-447.json".split('.').split('-')

另外,我将如何将其作为正则表达式?我有这个:

a="cat-vm-447.json".split(/-[\d]+./)

但这是在价值上分裂。我想退回号码。

我可以这样做:

a="cat-vm-447.json".slice(/[\d]+/)

这给了我447,但我真的很想指定-. 包围它。在正则表达式中添加它们会返回它们。

【问题讨论】:

    标签: ruby regex arrays


    【解决方案1】:

    第一个问题。 Split 返回一个数组,因此您需要使用Array#[] 来获取此数组的第一个(0)或最后一个(-1)元素。替代方法是 Array#firstArray#last 方法。

    a="cat-vm-447.json".split('.')[0].split('-')[-1] # => "447"
    

    第二个问题。您可以将您的号码匹配到组中,然后从响应中获取它(它将具有索引 1。索引为 0 的项目将完全匹配(在您的情况下为“-447.”)。您可以使用 String#[]String#match (除其他外)匹配您的正则表达式的方法。

    "cat-vm-447.json"[/-(\d+)\./, 1] # => "447"
    # or
    "cat-vm-447.json".match(/-(\d+)\./)[1] # => "447"
    

    【讨论】:

    • 如果文件名保证只有一串数字,"cat-vm-447.json"[/\d+/] 将返回"447" 而无需使用捕获。
    • @theTinMan,是的,但是 OP 真的很想指定 - 和 .包围它(来自问题)
    【解决方案2】:

    Split返回一个数组,所以需要指定下一次拆分的索引。

    a="cat-vm-447.json".split('.').first.split('-').last
    

    对于正则表达式,您需要将要捕获的内容括在括号中。

    /-(\d+)\./
    

    【讨论】:

      【解决方案3】:
      a = "cat-vm-447.json"
      b = a.match(/-(\d+)\./)
      p b[0] # => 447 
      

      【讨论】:

        【解决方案4】:

        试试这样的:

        if "cat-vm-447.json" =~ /([\d]+)/
           p $1
        else
           p "No matches"
        end
        

        正则表达式中的括号将结果提取到 $1 变量中。

        【讨论】:

          【解决方案5】:

          第二次拆分字符串时,实际上是在尝试拆分 Array 而不是 String。

          ruby-1.9.3-head :003 > "cat-vm-447.json".split('.')
          # => ["cat-vm-447", "json"] 
          

          在正则表达式的情况下,你可以使用/[-.]/

          ruby-1.9.3-head :008 > "cat-vm-447.json".split(/[-.]/)
          # => ["cat", "vm", "447", "json"] 
          ruby-1.9.3-head :009 > "cat-vm-447.json".split(/[-.]/)[2]
          # => "447" 
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多