为什么ignorecase标志(re.I)在re.sub()中不生效?
来自pydoc的说明:
re.sub = sub(模式, 替换内容, 字符串, 计数=0, 标志=0)
这个函数会返回一个新字符串,它是通过把字符串中最左边的、不重叠的模式替换成替换内容得到的。替换内容可以是一个字符串,也可以是一个可调用的函数;如果是字符串,里面的反斜杠会被处理。如果是可调用的函数,它会接收一个匹配对象,并且必须返回一个用于替换的字符串。
示例代码:
import re
print re.sub('class', 'function', 'Class object', re.I)
如果我不把模式改成'Class',就不会进行任何替换。
文档里没有提到这个限制,所以我觉得我可能做错了什么。
这里到底是怎么回事呢?
5 个回答
4
给那些还在使用Python 2.6.x或更早版本的人一个提示。这是关于Python 2.6中正则表达式的文档,里面说:
re.sub(pattern, repl, string[, count])
re.compile(pattern[, flags])
这意味着你不能直接把标志传给sub函数。标志只能和compile函数一起使用:
regex = re.compile('class', re.I)
regex.sub("function", "Class object")
9
这里提到的 flags
参数是第五个参数 - 你把 re.I
的值当成了 count
参数传了进去(这是一个很容易犯的错误)。
112
在我看来,你应该这样做:
import re
print(re.sub('class', 'function', 'Class object', flags=re.I))
如果不这样做,re.I
这个参数就会被传给count
这个参数。