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
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
Any suggestions?
2010/4/22 Nathaniel M. [email protected]:
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>
=> 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