在轨道上解析数字ruby

时间:2013-08-28 08:03:06

标签: ruby-on-rails ruby parsing

我想从我的另一个网站解析一些项目。

def self.run    
  ...    
  parsed_response = JSON.parse(response.body)
  parsed_response.each do |item|
    t = Page.new(:title => item["title"], :body => item["body"], :format_type => item["format_type"])     
    t.body.gsub!("Some text", "Other text")   
    t.save
  end
end

在弦体中有一些数字和公式:120 $; 130美元; 20 $ + 30 $ = 50 $等 我想添加每个数字10.但我怎么能这样做?
即使我添加到每个数字10,公式中的总和也必须大于10。 所以我必须在=之后删除总和并放置计算的总和。

提前致谢。

P.S。 这些数字很多而且动态。 我给出的数字作为随时间变化的一个例子。

1 个答案:

答案 0 :(得分:1)

这应该有效

def is_a_number?(s)
  s.to_s.match(/\A[+-]?\d+?(\.\d+)?\Z/) == nil ? false : true 
end

str = "120 $; 130 $; 20 $ + 30 $ = 50 $"
str_parts = str.split(" ")

equals_indices = str_parts.each_index.select{|i| str_parts[i] == "="}

str_parts.each_with_index do |p,i|
  if is_a_number?(p)

    #non-sum numbers
    if (str_parts[i-1] != "=")
      str_parts[i]=(p.to_i+10).to_s

    #sums
    else
      prior_equals_index = equals_indices.select{|ind| ind < i-1}.max || 0
      n_pluses = str_parts[prior_equals_index,i].count("+")
      str_parts[i]=(p.to_i+(n_pluses+1)*10).to_s
    end

  end
end

add_10_str = str_parts.join(" ")

=&GT; “130 $; 140 $; 30 $ + 40 $ = 70 $”