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

Python正则表达式:替换重复字符为字符(计数),支持阈值过滤

问题解决方法

一、基础场景的错误原因与正确写法

你之前的写法报错,核心原因有两个:

  • \1 或 \\1 在Python字符串中会被当作转义字符解析,不是正则的反向引用,直接写会触发语法错误;
  • 替换字符串里无法直接调用 len() 这类函数,必须用回调函数作为 re.sub() 的第二个参数。

正确实现 XXXXXXX99 → X(7)99 的代码:

import re
s = "XXXXXXX99"
result = re.sub(r'(X+)', lambda m: f'X({len(m.group(1))})', s)
print(result)  # 输出: X(7)99

这里用 lambda 函数接收匹配对象 m,m.group(1) 获取捕获到的连续X字符串,len() 计算长度后格式化输出即可。

二、复杂场景的实现(仅替换重复次数>5的连续字符)

针对类似 XXXX99_999999XX99.99 的字符串,需要匹配任意连续重复≥6次的字符(重复次数>5即至少6次),再替换为「字符(次数)」格式。

实现代码:

import re
s = "XXXX99_999999XX99.99"
# 正则解释:(.)匹配任意单个字符,\2{5,}表示该字符连续重复至少5次(加上前面的1次,总共≥6次)
result = re.sub(r'((.)\2{5,})', lambda m: f'{m.group(2)}({len(m.group(1))})', s)
print(result)  # 输出: XXXX99_9(6)XX99.99

正则细节说明:

  • (.):捕获单个任意字符,作为分组2;
  • \2{5,}:引用分组2的字符,要求它连续出现至少5次;
  • 外层的 ((.)\2{5,}):把整个连续重复的字符串作为分组1,方便后续获取总长度。

这样就能精准替换重复次数超过5的连续字符,其他短重复的字符保持原样。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 22:14:54