diff -r 0b600abb3074 Lib/idlelib/ReplaceDialog.py --- a/Lib/idlelib/ReplaceDialog.py Fri Oct 14 11:34:29 2011 -0500 +++ b/Lib/idlelib/ReplaceDialog.py Fri Oct 14 13:52:15 2011 -0500 @@ -58,11 +58,22 @@ self.do_replace() self.do_find(0) + def avoid_bogus_escape(self, chars): + # count number of trailing \'s + e = 0 + while e < len(chars) and chars[-(e+1)] == '\\': + e += 1 + + if (e % 2): # bogus escape if odd number of trailing \'s + chars += '\\' + + return chars + def replace_all(self, event=None): prog = self.engine.getprog() if not prog: return - repl = self.replvar.get() + repl = self.avoid_bogus_escape(self.replvar.get()) text = self.text res = self.engine.search_text(text, prog) if not res: @@ -138,7 +149,7 @@ m = prog.match(chars, col) if not prog: return False - new = m.expand(self.replvar.get()) + new = m.expand(self.avoid_bogus_escape(self.replvar.get())) text.mark_set("insert", first) text.undo_block_start() if m.group():