在re.sub()中引用匹配分组需用反向引用:数字形式为\1、\2(需双反斜杠或原始字符串),命名组用\g;也可传入函数,通过Match对象的group()方法获取分组内容。
等)">
在 re.sub() 中引用匹配到的分组内容,主要靠反向引用语法:\\1、\\2 表示第 1、第 2 个捕获组,\\g 或 \\g 更清晰且支持命名组。
括号 () 定义的捕获组按左括号出现顺序编号,替换字符串中用 \\1 引用第一个组,依此类推。注意:必须是双反斜杠(Python 字符串中表示一个字面反斜杠)。
re.sub(r'(\\d+)-(\\d+)', r'\\2/\\1', '2025-04') → '04/2025'
'\2/\1'(单反斜杠),会触发转义错误或意外行为(如 \2 被解释为 ASCII 字符)给分组起名后,用 \g 引用,更易读、不怕编号变化,也支持重复引用同一组。
re.sub(r'(?P\\d{4})-(?P\\d{2})', r'\\g/\\g', '2025-04') → '04/2025'
re.sub(r'(?P\\w+)', r'【\\g】', 'hello world') → '【hello】 【world】'
当逻辑复杂时,可传入函数作为 repl 参数,函数接收 Match 对象,用 .group(1)、.group('name') 等灵活处理。
def upper_first(m): return m.group(1).upper() + m.group(2)re.sub(r'(\\w)(\\w*)', upper_first, 'hello world') → 'Hello World'
容易出错的地方:
'\1' 是错的,必须写 r'
\1' 或 '\\1'
\\1,会报 re.error: invalid group reference
(?:...) 不产生编号,不能被 \\1 引用r'')写替换模板