Number Ruby

class NumberParser
  @@number_regexps = {
    :to_i => /([+-]?[0-9]+)/,
    :to_f => /([+-]?([0-9]*\.)?[0-9]+(e[+-]?[0-9]+)?)/i,
    :oct => /([+-]?[0-7]+)/,
    :hex => /\b([+-]?(0x)?[0-9a-f]+)\b/i
  }
  def NumberParser.re(parsing_method=:to_i)
    re = @@number_regexps[parsing_method]
    raise ArgumentError, "No regexp for #{parsing_method.inspect}!" unless re
    return re
  end
  def extract(s, parsing_method=:to_i)
    numbers = []
    s.scan(NumberParser.re(parsing_method)) do |match|
      numbers << match[0].send(parsing_method)
    end
    numbers
  end
end
p = NumberParser.new
pw = "104 and 391."
NumberParser.re(:to_i).match(pw).captures     
p.extract(pw, :to_i)                          
p.extract('$60.50', :to_f)                    
p.extract('AAA', :hex)
p.extract('017.', :oct)          
p.extract('From 0 to 10e60 AA -2.4 s')