求助:如何在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
相关产品推荐
相关产品推荐

