From: Robert Klemme Date: 2010-04-23T19:56:12+09:00 Subject: Re: Reprocess Escape Sequences 2010/4/22 Nathaniel Madura : > I am getting a string that has escape sequences in it, and I would like > to print it to the screen after reprocessing the escape sequences. Maybe > I have missed something obvious but I haven't seen anything in the docs > that suggest how to do this. To replicate the behaviour I create a > string in irb like so: > > $ irb >>> str = 'some \n\r string \t with \r escape \n sequences' > => "some \\n\\r string \\t with \\r escape \\n sequences" >>> eval "puts str" > some \n\r string \t with \r escape \n sequences > => nil If you use eval you rather need to do something like this irb(main):004:0> str = 'some \n\r string \t with \r escape \n sequences' => "some \\n\\r string \\t with \\r escape \\n sequences" irb(main):005:0> puts eval('"'+str+'"') some escape with sequences => nil irb(main):006:0> >>> puts "%s" % str > some \n\r string \t with \r escape \n sequences > => nil > > I recognize that I can simply do a gsub: > >>> puts str.gsub(/\\n/, "\n") > some > \r string \t with \r escape >  sequences > => nil > > but that would mean I would have to pattern match all sequences, and it > seems like there should be a better way Actually doing a replacement would probably be my preferred way because of the security implications of eval. You can do it in one go irb(main):008:0> PAT = {'n'=>"\n",'t'=>"\t",'r'=>"\r"} => {"n"=>"\n", "t"=>"\t", "r"=>"\r"} irb(main):009:0> str.gsub(/\\(.)/){|m| PAT[$1]} => "some \n\r string \t with \r escape \n sequences" Kind regards robert -- remember.guy do |as, often| as.you_can - without end http://blog.rubybestpractices.com/