Mega Code Archive

 
Categories / Ruby / Number
 

Number parser by regular expressons

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')