openmind ☃   February 06, 2007  ☃  Ruby: Destructive Multiple gsub  ()

#!/usr/bin/env ruby
class String
  def mgsub!(key_value_pairs=[].freeze)
    regexp_fragments = key_value_pairs.collect{|k,v| k}
    gsub!(Regexp.union(*regexp_fragments)) do |match|
      key_value_pairs.detect{|k,v| k =~ match}[1]
    end
  end
end
num_swap = [[/one/i,'1'],[/two/i,'2'],[/three/i,'4']]
lines.slice!(0) && lines.each do |f|
  if (f[-1].split("")[-1].to_i > 6)
    puts f[0].gsub!(/\s.*\(.*\)(.*)/,'').to_s + f[-1].mgsub!(num_swap)
  end
end

Adapted from The Ruby Cookbook.

blog comments powered by Disqus