You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中如何基于匹配序号替换指定正则模式的所有匹配实例?

Python中按匹配序号替换指定正则模式的所有匹配项

要实现将文本中所有符合(AB)(.*?)(CD)模式的匹配项,按匹配顺序添加对应数量的n和序号后缀(第1个匹配加n1,第2个加nn2,第3个加nnn3),可以借助Python的re模块,通过回调函数跟踪匹配次数来完成。

实现方法1:使用全局计数器

import re

# 原始文本
raw_text = "bla bla blab ABftrCD bla bla ABgtCD bla blab ABnyhCD"

# 初始化匹配计数器
match_count = 0

def add_suffix(match_obj):
    global match_count
    match_count += 1
    # 生成对应后缀:第N次匹配就加N个'n' + 数字N
    suffix = 'n' * match_count + str(match_count)
    # 返回原匹配内容 + 后缀
    return match_obj.group(0) + suffix

# 执行替换
processed_text = re.sub(r'(AB)(.*?)(CD)', add_suffix, raw_text)
print(processed_text)

实现方法2:使用闭包(更优雅,避免全局变量)

如果不想用全局变量,可通过闭包维护计数器,减少副作用:

import re

raw_text = "bla bla blab ABftrCD bla bla ABgtCD bla blab ABnyhCD"

def create_replacer():
    count = 0
    def replacer(match_obj):
        nonlocal count
        count += 1
        suffix = 'n' * count + str(count)
        return match_obj.group(0) + suffix
    return replacer

processed_text = re.sub(r'(AB)(.*?)(CD)', create_replacer(), raw_text)
print(processed_text)

运行结果

两种方法都会输出:

bla bla blab ABftrCDn1 bla bla ABgtCDnn2 bla blab ABnyhCDnnn3

关键说明

  • re.sub的第三个参数传入回调函数时,每次匹配到符合正则模式的内容,就会调用该函数,函数接收匹配对象match_obj作为参数
  • match_obj.group(0)获取整个匹配的字符串(比如ABftrCD)
  • 通过计数器跟踪匹配顺序,动态生成对应数量的n和序号后缀

内容的提问来源于stack exchange,提问作者moshtaba

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 02:24:29