Minor improvements to the template code.

* Add comment bars segregating this code from the rest.
* Improve readability of the re pattern with indentation and comments on
  the same line.
* Replace the groupdict() and get() pair with a direct call to group()
  which does the same thing.
diff --git a/Lib/string.py b/Lib/string.py
index d166f38..9965111 100644
--- a/Lib/string.py
+++ b/Lib/string.py
@@ -79,6 +79,7 @@
 
 
 
+####################################################################
 import re as _re
 
 class Template(unicode):
@@ -87,25 +88,20 @@
 
     # Search for $$, $identifier, ${identifier}, and any bare $'s
     pattern = _re.compile(r"""
-# Match exactly two $'s -- this is the escape sequence
-(?P<escaped>\${2})|
-# Match a $ followed by a Python identifier
-\$(?P<named>[_a-z][_a-z0-9]*)|
-# Match a $ followed by a brace delimited identifier
-\${(?P<braced>[_a-z][_a-z0-9]*)}|
-# Match any other $'s
-(?P<bogus>\$)
-""", _re.IGNORECASE | _re.VERBOSE)
+      (?P<escaped>\${2})|                # Escape sequence of two $ signs
+      \$(?P<named>[_a-z][_a-z0-9]*)|     # $ and a Python identifier
+      \${(?P<braced>[_a-z][_a-z0-9]*)}|  # $ and a brace delimited identifier
+      (?P<bogus>\$)                      # Other ill-formed $ expressions
+    """, _re.IGNORECASE | _re.VERBOSE)
 
     def __mod__(self, mapping):
         def convert(mo):
-            groups = mo.groupdict()
-            if groups.get('escaped') is not None:
+            if mo.group('escaped') is not None:
                 return '$'
-            if groups.get('bogus') is not None:
+            if mo.group('bogus') is not None:
                 raise ValueError('Invalid placeholder at index %d' %
                                  mo.start('bogus'))
-            val = mapping[groups.get('named') or groups.get('braced')]
+            val = mapping[mo.group('named') or mo.group('braced')]
             return unicode(val)
         return self.pattern.sub(convert, self)
 
@@ -121,27 +117,28 @@
 
     def __mod__(self, mapping):
         def convert(mo):
-            groups = mo.groupdict()
-            if groups.get('escaped') is not None:
+            if mo.group('escaped') is not None:
                 return '$'
-            if groups.get('bogus') is not None:
+            if mo.group('bogus') is not None:
                 raise ValueError('Invalid placeholder at index %d' %
                                  mo.start('bogus'))
-            named = groups.get('named')
+            named = mo.group('named')
             if named is not None:
                 try:
                     return unicode(mapping[named])
                 except KeyError:
                     return '$' + named
-            braced = groups.get('braced')
+            braced = mo.group('braced')
             try:
                 return unicode(mapping[braced])
             except KeyError:
                 return '${' + braced + '}'
         return self.pattern.sub(convert, self)
 
+del _re
 
 
+####################################################################
 # NOTE: Everything below here is deprecated.  Use string methods instead.
 # This stuff will go away in Python 3.0.