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

求助:如何在Python中实现字符串的特定条件替换

Python实现特定规则的连续"a"字符串替换

给定原始字符串:

string = "abaabaaabaaaabaaabaaaaaabaababaaabaaaabaaaaaabaaaaabaaabaabaababaaabaaaabaaaabaabaaab"

替换规则:

  • 单个a替换为c
  • 连续两个a替换为d
  • 连续奇数个a:第一个a替换为c,剩余部分每两个连续a替换为d(示例:aaab→cdb)
  • 连续偶数个a:每两个连续a替换为d(示例:aaaab→ddb)

预期输出结果:

cbdbcdbddbcdbdddbdbcbcdbddbdddbcddbcdbdbdbcbcdbddbddbdbcdb

解法一:正则表达式实现

利用re.sub()结合自定义替换函数,匹配所有连续的a序列并按规则处理:

import re

def replace_a_sequence(match):
    a_seq = match.group()
    seq_length = len(a_seq)
    if seq_length == 1:
        return 'c'
    elif seq_length % 2 == 1:
        # 奇数长度:1个c + 剩下偶数个a转成d(每两个一组)
        return 'c' + 'd' * ((seq_length - 1) // 2)
    else:
        # 偶数长度:直接按每两个a转一个d
        return 'd' * (seq_length // 2)

original_str = "abaabaaabaaaabaaabaaaaaabaababaaabaaaabaaaaaabaaaaabaaabaabaababaaabaaaabaaaabaabaaab"
output_str = re.sub(r'a+', replace_a_sequence, original_str)

# 验证结果
print(output_str == "cbdbcdbddbcdbdddbdbcbcdbddbdddbcddbcdbdbdbcbcdbddbddbdbcdb")  # 输出True

说明

  • 正则表达式r'a+'会匹配所有连续的a字符序列
  • 自定义函数replace_a_sequence接收匹配到的序列,根据长度执行对应替换逻辑,完全贴合需求规则

解法二:遍历字符串手动处理

如果倾向于不用正则,可以通过遍历字符串统计连续a的数量,逐个处理字符:

original_str = "abaabaaabaaaabaaabaaaaaabaababaaabaaaabaaaaaabaaaaabaaabaabaababaaabaaaabaaaabaabaaab"
result_list = []
current_a_count = 0

for char in original_str:
    if char == 'a':
        current_a_count += 1
    else:
        # 先处理之前累积的连续a
        if current_a_count > 0:
            if current_a_count == 1:
                result_list.append('c')
            elif current_a_count % 2 == 1:
                result_list.append('c' + 'd' * ((current_a_count - 1) // 2))
            else:
                result_list.append('d' * (current_a_count // 2))
            current_a_count = 0
        # 添加当前非a字符
        result_list.append(char)

# 处理字符串末尾可能剩余的连续a
if current_a_count > 0:
    if current_a_count == 1:
        result_list.append('c')
    elif current_a_count % 2 == 1:
        result_list.append('c' + 'd' * ((current_a_count - 1) // 2))
    else:
        result_list.append('d' * (current_a_count // 2))

output_str = ''.join(result_list)

# 验证结果
print(output_str == "cbdbcdbddbcdbdddbdbcbcdbddbdddbcddbcdbdbdbcbcdbddbddbdbcdb")  # 输出True

说明

  • 用current_a_count变量实时统计当前连续a的数量
  • 遇到非a字符时,先处理之前累积的a序列,再添加当前字符
  • 遍历结束后必须检查是否还有未处理的末尾连续a,避免遗漏

两种方法都能精准实现需求,正则写法更简洁高效,遍历写法逻辑直观,适合新手理解替换规则的执行过程。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 12:15:27