["python","regex"]
Python re.sub with a flag does not replace all occurrences

The Python docs say: re.MULTILINE: When specified, the pattern character '^' matches at the beginning of the string and at the beginning of each line (immediately following each newline)... By default, '^' matches only at the beginning of the string... So what's going on when I get the following unexpected result? >>> import re >>> s = """// The quick brown fox. ... // Jumped over the lazy dog.""" >>> re.sub('^//', '', s, re.MULTILINE) ' The quick brown fox.\n// Jumped over the lazy dog.'
Look at the definition of re.sub: re.sub(pattern, repl, string[, count, flags]) The 4th argument is the count, you are using re.MULTILINE (which is 8) as the count, not as a flag. Either use a named argument: re.sub('^//', '', s, flags=re.MULTILINE) Or compile the regex first: re.sub(re.compile('^//', re.MULTILINE), '', s)