Python如何将字符串中&int-int标记替换为对应索引切片内容
优化解决方案
你可以用正则表达式大幅简化实现逻辑,代码量更小,可读性和执行效率也更高:
def expand(text): import re # 匹配&开头后接数字-数字的标记,捕获起止索引 pattern = r'&(\d+)-(\d+)' # 第一步:移除所有标记,得到索引参考字符串 ref_str = re.sub(pattern, '', text) ref_len = len(ref_str) # 替换回调函数:每个匹配到的标记替换为对应切片或? def replace_match(match): start = int(match.group(1)) end = int(match.group(2)) res = [] for i in range(start, end+1): res.append(ref_str[i] if i < ref_len else '?') return ''.join(res) # 执行替换返回结果 return re.sub(pattern, replace_match, text)
测试验证
- 测试用例1:
expand("abcd&1-4efg")→ 输出abcdbcdeefg,和需求一致 - 测试用例2:
expand("abcd&5-10efgh")→ 输出abcdfgh???efgh,符合缺失索引补?的要求 - 测试用例3:
expand("&10-15abcdef&1-5&4-5pqrs")→ 支持连续标记的场景
方案优势
- 代码量仅为原实现的1/4,逻辑清晰易维护
- 正则匹配底层是C实现,执行效率远高于手动逐字符遍历
- 天然支持多位数的起止索引,不需要额外处理数字拼接逻辑
- 边界处理简单,缺失索引补
?的逻辑直接遍历区间判断即可
内容的提问来源于stack exchange,提问作者Adam Firdaus Tan
相关产品推荐
相关产品推荐

