将数组链接到新的split函数调用

时间:2012-01-25 18:38:12

标签: ruby regex arrays

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

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

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

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

但是这会分裂价值。我想要退回这个号码。

我可以这样做:

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

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

5 个答案:

答案 0 :(得分:3)

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

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

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

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

答案 1 :(得分:1)

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

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

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

/-(\d+)\./

答案 2 :(得分:0)

a = "cat-vm-447.json"
b = a.match(/-(\d+)\./)
p b[0] # => 447 

答案 3 :(得分:0)

尝试类似的东西:

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

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

答案 4 :(得分:0)

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

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

在regexp案例中,您可以使用/[-.]/

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"