Get rid of _expand() altogether - the match object supports m.expand().
diff --git a/Tools/idle/ReplaceDialog.py b/Tools/idle/ReplaceDialog.py
index 7d5de69..3d71703 100644
--- a/Tools/idle/ReplaceDialog.py
+++ b/Tools/idle/ReplaceDialog.py
@@ -6,7 +6,6 @@
 import tkMessageBox
 import SearchEngine
 from SearchDialogBase import SearchDialogBase
-import sre_parse
 
 def replace(text):
     root = text._root()
@@ -91,7 +90,7 @@
             line, m = res
             chars = text.get("%d.0" % line, "%d.0" % (line+1))
             orig = m.group()
-            new = self._expand(m, repl)
+            new = m.expand(repl)
             i, j = m.span()
             first = "%d.%d" % (line, i)
             last = "%d.%d" % (line, j)
@@ -143,7 +142,7 @@
         m = prog.match(chars, col)
         if not prog:
             return False
-        new = self._expand(m, self.replvar.get())
+        new = m.expand(self.replvar.get())
         text.mark_set("insert", first)
         text.undo_block_start()
         if m.group():
@@ -155,14 +154,6 @@
         self.ok = 0
         return True
 
-    def _expand(self, m, template):
-        # XXX This code depends on internals of the regular expression
-        # engine!  There's no standard API to do a substitution when you
-        # have already found the match.  One should be added.
-        # XXX This parses the template over and over...
-        ptemplate = sre_parse.parse_template(template, m.re)
-        return sre_parse.expand_template(ptemplate, m)
-
     def show_hit(self, first, last):
         text = self.text
         text.mark_set("insert", first)