I'm trying to perform a number of replacements using re.sub(), except I want the first replacement to be different. One straightforward approach would be to run re.sub() twice with count = 1 for the first call, but because re.sub() allows for the repl argument to be a function, we can do this in a single call:
import redef repl(matchobj): global first_sub if first_sub: first_sub = False print(f"Replacing '{matchobj.group()}' at {matchobj.start()} with ':)'") return ":)" else: print(f"Deleting '{matchobj.group()}' at {matchobj.start()}") return ""text = "hello123 world456"first_sub = Truetext = re.sub(r"\d+", repl, text)# Output:# Replacing '123' at 5 with ':)'# Deleting '456' at 14Unfortunately, this makes use of global, which isn't great. Is there a better way to do this?