如何在字符串中每个'Q'后添加对应出现序号?
更优解决方案分析
你的代码能实现需求,但存在两处可以优化的地方:一是每次循环都重新遍历字符串查找所有Q,效率会随着匹配数量增加而降低;二是正则匹配所有单独的Q,如果字符串里有非Q =格式的Q,会错误加上序号。
下面是两种更高效精准的实现方式:
方法一:用re.sub的回调函数+全局计数器
利用re.sub支持替换函数的特性,每次匹配到目标Q =时自动递增序号:
import re test = '''Q = 1 t h Q = 2 t h Q = 3 t h''' count = 0 def add_number(match): global count count += 1 return f'Q{count} =' result = re.sub(r'Q =', add_number, test) print(result)
方法二:用闭包封装计数器(避免全局变量)
如果不想用全局变量,用闭包把计数器封装起来更优雅:
import re test = '''Q = 1 t h Q = 2 t h Q = 3 t h''' def get_replacer(): count = 0 def replacer(match): nonlocal count count += 1 return f'Q{count} =' return replacer result = re.sub(r'Q =', get_replacer(), test) print(result)
为什么这两种方法更好?
- 效率更高:只需要遍历字符串一次,不用每次循环都重新查找所有匹配项;
- 匹配精准:正则
r'Q ='只针对目标格式,不会误处理其他场景的Q; - 代码更简洁:省去了手动切片拼接字符串的麻烦,可读性更强。
内容的提问来源于stack exchange,提问作者zxdawn
相关产品推荐
相关产品推荐

