Store the current regex syntax along with the regular expression
string as the key to the cache. This means that changing the syntax
will return the correct compiled pattern.
clear_cache(): New function.
diff --git a/Lib/regsub.py b/Lib/regsub.py
index c87ac26..8fb3306 100644
--- a/Lib/regsub.py
+++ b/Lib/regsub.py
@@ -109,27 +109,32 @@
# Manage a cache of compiled regular expressions.
-# If the pattern is a string a compiled version of it is returned.
-# If the pattern has been used before we return an already compiled
+#
+# If the pattern is a string a compiled version of it is returned. If
+# the pattern has been used before we return an already compiled
# version from the cache; otherwise we compile it now and save the
-# compiled version in the cache.
-# Instead of a string, a compiled regular expression can also be
-# passed.
-# WARNING: if the pattern syntax is changed, the cache should be
-# flushed!
+# compiled version in the cache, along with the syntax it was compiled
+# with. Instead of a string, a compiled regular expression can also
+# be passed.
cache = {}
def compile(pat):
if type(pat) <> type(''):
return pat # Assume it is a compiled regex
- if cache.has_key(pat):
- prog = cache[pat] # Get it from the cache
+ key = (pat, regex.get_syntax())
+ if cache.has_key(key):
+ prog = cache[key] # Get it from the cache
else:
- prog = cache[pat] = regex.compile(pat)
+ prog = cache[key] = regex.compile(pat)
return prog
+def clear_cache():
+ global cache
+ cache = {}
+
+
# Expand \digit in the replacement.
# Each occurrence of \digit is replaced by the substring of str
# indicated by regs[digit]. To include a literal \ in the