class Replacement(object): def __init__(self, replacement): self.replacement = replacement self.matched = None self.replaced = None def __call__(self, match): self.matched = match.group(0) self.replaced = match.expand(self.replacement) return self.replaced>>> repl = Replacement('not the \1')>>> re.sub('(orig.*?l)', repl, 'This is the original string.') 'This is the not the original string.'>>> repl.matched 'original'>>> repl.replaced 'not the original'编辑: 正如@FJ所指出的,以上内容将仅记住最后一个匹配项/替换项。此版本可处理多个事件:
class Replacement(object): def __init__(self, replacement): self.replacement = replacement self.occurrences = [] def __call__(self, match): matched = match.group(0) replaced = match.expand(self.replacement) self.occurrences.append((matched, replaced)) return replaced>>> repl = Replacement('[\1]')>>> re.sub('s(d)', repl, '1 2 3') '1[2][3]'>>> for matched, replaced in repl.occurrences: ....: print matched, '=>', replaced ....: 2 => [2] 3 => [3]


