On Apr 9, 2008, at 8:24 AM, Peter Bailey wrote: > Rob Biedenharn wrote: >> On Apr 8, 2008, at 2:53 PM, Peter Bailey wrote: >>> file = File.read("test1.txt") >>> And, I'm getting this: >>> Peter >> Dir.chdir("C:/users/pb4072/documents") do |d| >> file = File.read("test1.txt") >> output = file.gsub(%r{^(<row><entry><text><emph face="b">)(.*)(</ >> emph>)}m) do |match| >> "#{$1}#{$2.gsub(%r{\b\w+\b}){|w|w.capitalize}}#{$3}" >> end >> File.open("test1.txt", "w") { |f| f.write output } >> end >> >> Note the use of three capture groups to get the unchanged initial and >> final parts as well as the middle part that is altered. The %r{\b\w+ >> \b} is a Regexp that matches words, \b is a word-boundary and \w is a >> word-character (short for [a-zA-Z0-9_]). Your use of >> String#capitalize! returns nil if no change is made. >> >> -Rob >> >> Rob Biedenharn http://agileconsultingllc.com >> Rob / AgileConsultingLLC.com > > Thanks, Rob. This works beautifully, except that I need that last > </emph> in my output. It's being stripped with your code. I don't see > why, because it's just your $3, isn't it? > -- > Posted via http://www.ruby-forum.com/. You said to Todd: The original text is just: <row><entry><text><emph face="b">THE QUICK BROWN FOX JUMPED OVER THE LAZY DOG.<\/emph>/ I assumed that the "<\/emph>/" part was a cut-n-paste of a regexp for the email (which is one reason that I change from // to %r{} construction of the Regexp so the / wouldn't have to be escaped. You may have to change the second group to (.*?) [reluctant match rather than greedy match] or adjust the third group to exactly match your input. -Rob Rob Biedenharn http://agileconsultingllc.com Rob / AgileConsultingLLC.com