Index: re.py =================================================================== --- re.py (revision 62549) +++ re.py (working copy) @@ -196,23 +196,17 @@ "Compile a template pattern, returning a pattern object" return _compile(pattern, flags|T) -_alphanum = {} -for c in 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890': - _alphanum[c] = 1 -del c +_special = dict.fromkeys( r'.^$*+?{}[]\|()', 1) def escape(pattern): - "Escape all non-alphanumeric characters in pattern." - s = list(pattern) - alphanum = _alphanum - for i in range(len(pattern)): - c = pattern[i] - if c not in alphanum: - if c == "\000": - s[i] = "\\000" - else: - s[i] = "\\" + c - return pattern[:0].join(s) + "Escape all special characters in pattern." + holder = list(pattern) + for i, c in enumerate(pattern): + if c in _special: + holder[i] = "\\%c" % (c) + elif c == "\000": + holder[i] = "\\000" + return ''.join(holder) # -------------------------------------------------------------------- # internals Index: test/test_re.py =================================================================== --- test/test_re.py (revision 62549) +++ test/test_re.py (working copy) @@ -4,7 +4,8 @@ from test.test_support import verbose, run_unittest, catch_warning import re from re import Scanner -import sys, os, traceback +#import sys, +import os, traceback from weakref import proxy # Misc tests from Tim Peters' re.doc @@ -431,17 +432,21 @@ self.assertEqual(re.search("a\s", "a ").group(0), "a ") def test_re_escape(self): - p="" + p = "" for i in range(0, 256): p = p + chr(i) self.assertEqual(re.match(re.escape(chr(i)), chr(i)) is not None, True) self.assertEqual(re.match(re.escape(chr(i)), chr(i)).span(), (0,1)) - pat=re.compile(re.escape(p)) + pat = re.compile(re.escape(p)) self.assertEqual(pat.match(p) is not None, True) self.assertEqual(pat.match(p).span(), (0,256)) + # All ASCII characters except NULL + same = ''.join( [chr(i) for i in range(1, 256) if chr(i) not in re._special] ) + self.assertEqual(re.escape(same), same) + def test_pickling(self): import pickle self.pickle_test(pickle)