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
相关产品推荐
相关产品推荐

