theta theta - 1 year ago 57
Python Question

Why doesn't ignorecase flag (re.I) work in re.sub()

From pydoc:

re.sub = sub(pattern, repl, string, count=0, flags=0)

Return the string obtained by replacing the leftmost
non-overlapping occurrences of the pattern in string by the
replacement repl. repl can be either a string or a callable;
if a string, backslash escapes in it are processed. If it is
a callable, it's passed the match object and must return
a replacement string to be used.

example code:

import re
print re.sub('class', 'function', 'Class object', re.I)

No replacement is made unless I change pattern to 'Class'.

Documentation doesn't mention anything about this limitation, so I assume I may be doing something wrong.

What's the case here?


Seems to me that you should be doing:

import re
print re.sub('class', 'function', 'Class object', flags=re.I)

Without this, the re.I argument is passed to the count argument.