Python中如何将字符串内连续重复的指定字符替换为单个该字符
连续重复指定字符替换为单个字符的实现方案
方案1:正则表达式实现(最简洁)
正则表达式可以直接匹配任意长度的连续重复目标字符,无需提前枚举所有重复长度的规则,仅需一行核心代码即可完成需求。
以你给出的分号去重需求为例,Python实现代码如下:
import re original_str = '1;AA;;1234567;;some text;;some text;;;some text;some text;;;;;;1, 2, 3, 4, 5, 6;;;;;;;;;;;another text;;;;;;;;;;;;;' # 匹配所有连续1次及以上的分号,统一替换为单个分号 result = re.sub(r';+', ';', original_str) print(result)
输出结果和你需要的目标格式完全一致。
如果需要同时处理多种字符的连续重复(比如同时处理分号、逗号的重复),可以修改正则规则复用逻辑:
# 同时将连续的分号、逗号替换为单个对应字符 result = re.sub(r'([;,])\1+', r'\1', original_str)
其中([;,])是分组匹配分号或逗号,\1+匹配和分组内容一致的连续重复内容,替换时用\1引用分组匹配到的单个字符即可。
方案2:遍历实现(无需引入正则库)
如果你不想引入正则库,也可以通过遍历字符串的方式实现,性能稳定,适合处理超长长字符串场景:
def dedup_target_char(input_str: str, target_char: str) -> str: result = [] last_char = None for char in input_str: # 当前字符是目标字符且和上一个保留的字符相同就跳过 if char == target_char and char == last_char: continue result.append(char) last_char = char return ''.join(result) # 调用示例 result = dedup_target_char(original_str, ';')
内容的提问来源于stack exchange,提问作者Goosuto
相关产品推荐
相关产品推荐

