如何用正则表达式将重复超20次的字符替换为10次重复?
简化重复字符替换为固定次数的实现方式
需求说明
当字符串中任意字符连续重复次数超过20次时,将其替换为该字符的10次重复。例如把'adfajlkjl a sd=============================================== READFadfa'转换为'adfajlkjl a sd========== READFadfa'。
原暴力解法的问题
原实现需要手动重复写10次反向引用\1,写法冗余且不易维护。这里提供两种更简洁的实现方式:
方法1:用字符串乘法简化替换模板
直接利用Python的字符串乘法特性,把r'\1'重复10次,不用手动敲10遍:
import re string1 = 'adfajlkjl a sd=============================================== READFadfa' # 匹配任意连续重复20次及以上的字符 pattern = r'(.)\1{20,}' # 用字符串乘法生成10次重复的替换值 result = re.sub(pattern, r'\1' * 10, string1) print(result) # 输出:'adfajlkjl a sd========== READFadfa'
方法2:使用回调函数(更灵活)
如果后续需要调整重复次数(比如改成8次或15次),用回调函数可以把次数做成变量,维护更方便:
import re string1 = 'adfajlkjl a sd=============================================== READFadfa' def handle_repeated(match_obj): # 获取捕获的单个字符 target_char = match_obj.group(1) # 返回该字符重复10次的结果(次数可改成变量) repeat_count = 10 return target_char * repeat_count pattern = r'(.)\1{20,}' result = re.sub(pattern, handle_repeated, string1) print(result)
正则说明
(.)\1{20,}的作用:
(.):匹配任意单个字符,并将其捕获为第1个分组\1{20,}:匹配该字符连续重复20次及以上的情况
内容的提问来源于stack exchange,提问作者user67275
相关产品推荐
相关产品推荐

