因为应该替换整个模式:
返回通过用替换repl替换字符串中模式中最左边的非重叠出现而获得的字符串。
如果仅替换某些子组,则具有多个组的复杂正则表达式将不起作用。有几种可能的解决方案:
- 完整指定模式:
re.sub('ab', 'ad', 'abc')-我的最爱,因为它非常易读和明确。 - 捕获 要 保留的组,然后在模式中引用它们(请注意,它应该是原始字符串,以避免转义):
re.sub('(a)b', r'1d', 'abc') - 与以前的选项类似:提供一个回调函数作为
repl
参数,并使其处理该Match
对象并返回所需的结果。 - 使用lookbehinds / lookaheds,它们不包含在匹配项中,但会影响匹配:
re.sub('(?<=a)b', r'd', 'abxb')yieldsadxb
。该?<=
小组的开头说“这是一个先行”。



