如何通过RegExp从Array(混合类型:整数/字符串)中提取整数值?

时间:2016-12-30 07:31:56

标签: arrays ruby regex

我有一个数组:

arr2 = [6, '(7,0)', '(15,0)', '(5,0)', 3, '(15,2)', 17]

我想解析数组的每个元素并获取如下值:

arr2 = [6, 0, 0, 0, 3, 2, 17]

表示如果数组元素是(15,2)那么只有第二个元素即2应该在响应中打印出来,如果数组元素的格式不是像(7,0)那么它应该打印出来原样。

3 个答案:

答案 0 :(得分:3)

[6, [7,0], [15,0], [5,0], 3, [15,2], 17].map { |e| [*e].last }
#⇒ [6, 0, 0, 0, 3, 2, 17]

如果元素是字符串:

%w[6, (7,0), (15,0), (5,0), 3, (15,2), 17].map { |e| e[/\d+(?=\)|,?\z)/] }
#⇒ ["6", "0", "0", "0", "3", "2", "17"]

map(&:to_i)后者获取整数数组。

最后,对于最新版本:

[6, '(7,0)', '(15,0)', '(5,0)', 3, '(15,2)', 17].
    map { |e| e.to_s[/\d+(?=\)|,?\z)/] }.
    map(&:to_i)
#⇒ [6, 0, 0, 0, 3, 2, 17]

异国:

[6, '(7,0)', '(15,0)', '(5,0)', 3, '(15,2)', 17].
    inspect.
    scan(/\d+(?:,\d+)?/).
    map { |e| e.split(',').last.to_i }
#⇒ [6, 0, 0, 0, 3, 2, 17]

答案 1 :(得分:3)

arr = [6, '(7,0)', '(15,0)', '(5,0)', 3, '(15,2)', 17]

arr.map do |obj|
  case obj
  when Integer
    obj
  else
    obj[/(?<=,)\d+/].to_i
  end
end
  #=> [6, 0, 0, 0, 3, 2, 17]

答案 2 :(得分:3)

这对我来说似乎很好:

arr2.map{|x| x.to_s.scan(/\d+/).last.to_i }

如果你想要没有正则表达式的东西:

arr2.map do |item|
  item.is_a?(Integer) ? item : item[1+item.rindex(',')..-2].to_i 
end