从数组Ruby中取出数字

时间:2011-07-25 22:23:29

标签: ruby

编程和Ruby的新手。我正在使用iStock API,需要发送一个fileID来请求有关我的文件的信息。

我需要的示例文件可以在iStock上请求信息:

["iStock_000001053628Small.jpg", "iStock_000002270952Big_Web.mov", "ist2_7034929-blurred-commuter.jpg", iStock_000000042199Medium.jpg] 

使用irb,我发送给iStock API的代码:

require 'xmlrpc'
parameters = {:apiKey=>"#", :fileID=>"1053628"}
server = XMLRPC::Client.new2( "http://api.istockphoto.com/webservices/xmlrpc")
server.call("istockphoto.image.getInfo", parameters)

挑战: 我需要从数组中提取fileID号。这意味着我必须从文件号的前面取出所有的零。但是,文件编号的长度不同,并且每个图像的正面的零数不同。

istock.each do |x|
  result = ' '
  x.scan(/\d+/) do |y|
    if y.to_i > 4
      result << y
    end
    puts result
  end
end

000001053628
000002270952
7034929
000000042199

我不确定如何处理这个问题,因为如果我为0的集合设置规则,可能有一段时间实际的fileID也包含这些。

2 个答案:

答案 0 :(得分:2)

我不确定您需要支持哪些不同的文件名格式,但这样的内容对我有用:

$ irb
irb(main):001:0> test_data = ["iStock_*000001053628*Small.jpg", "iStock_000002270952BigWeb.mov", "ist2_7034929-blurred-commuter.jpg", "iStock_*000000042199*Medium.jpg"]
=> ["iStock_*000001053628*Small.jpg", "iStock_000002270952Big Web.mov", "ist2_7034929blurred-commuter.jpg", "iStock_*000000042199*Medium.jpg"]
irb(main):002:0> test_data.map do |d|
irb(main):003:1*   d.scan(/\d{4,}/).first.gsub(/^0+/,'')
irb(main):004:1> end
=> ["1053628", "2270952", "7034929", "42199"]
irb(main):005:0>

答案 1 :(得分:0)

我不确定这条线是什么:

if y.to_i > 4

但听起来你只想删除前导零,对吗?

在这种情况下,试试这个:

# Parse the string as an integer, then re-format as a string.
result << y.to_i.to_s

这会在您的result数组中填充有效删除前导零的字符串。