basi wrote:
> Hello,
>
> In the code below, the pattern /#{a}/ consumes more than what I'd
> expect it to:
>
> irb(main):338:0> abbr = %w[Mr. Dr. i.e. Prof.]
> text = "Mr. Drake and Dr. Hide, i.e., Mr. Dride, I presume?"
> abbr.each do |a|
> abbrNoDot = a.gsub(/\./,"")
> text.gsub!(/#{a}/,abbrNoDot)
> end
> puts text
> => ["Mr.", "Dr.", "ave.", "st.", "i.e.", "Prof."]
> => "Mr. Drake and Dr. Hide, i.e., Mr. Dride, I presume?"
> => ["Mr.", "Dr.", "ave.", "st.", "i.e.", "Prof."]
> Mr Drke and Dr Hie ie, Mr Drde, I presume?
>
> Thus "Drake" and "Dride satisfy the pattern "Dr", becoming "Drke" and
> "Drde". I've tried many variations on the pattern /#{a}/, but I just
> don't have enough Regex in my mind yet.
>
> Thanks for the help,
> basi
>
You need to escape the dot which is matching any character.
abbr = %w[Mr. Dr. i.e. Prof.]
text = "Mr. Drake and Dr. Hide, i.e., Mr. Dride, I presume?"
abbr.each do |a|
text.gsub!(/#{Regexp.escape(a)}/, a.gsub(/\./, ''))
end
puts text
#=> Mr Drake and Dr Hide, ie, Mr Dride, I presume?
daz