我有以下内容并尝试拆分'.'
,然后将返回的第一部分拆分为'-'
并返回第一部分的最后一部分。我想返回447
。
a="cat-vm-447.json".split('.').split('-')
另外,我如何将其作为正则表达式?我有这个:
a="cat-vm-447.json".split(/-[\d]+./)
但是这会分裂价值。我想要退回这个号码。
我可以这样做:
a="cat-vm-447.json".slice(/[\d]+/)
这会让我回到447
,但我真的想指定-
和.
围绕它。在正则表达式中添加它们会返回它们。
答案 0 :(得分:3)
第一个问题。 Split返回一个数组,因此您需要使用Array#[]来获取此数组的第一个(0)或最后一个(-1)元素。替代方案是Array#first和Array#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"