diff options
author | Barry Warsaw <barry@python.org> | 1997-02-18 18:52:55 (GMT) |
---|---|---|
committer | Barry Warsaw <barry@python.org> | 1997-02-18 18:52:55 (GMT) |
commit | b67a25c0794d4a2c4f4907a8eb021750c11b1de4 (patch) | |
tree | 83573561ad811a8afd7d3cc15be97e9ee75210ff | |
parent | 909d7c3284c84dd50574aca78c59ed4fea3de4b0 (diff) | |
download | cpython-b67a25c0794d4a2c4f4907a8eb021750c11b1de4.zip cpython-b67a25c0794d4a2c4f4907a8eb021750c11b1de4.tar.gz cpython-b67a25c0794d4a2c4f4907a8eb021750c11b1de4.tar.bz2 |
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.
-rw-r--r-- | Lib/regsub.py | 25 |
1 files changed, 15 insertions, 10 deletions
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 @@ def capwords(str, pat='[^a-zA-Z0-9_]+'): # 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 |