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

如何在Python中实现字符串内多字符子串的互相交换功能?

Python多字符子串互换最优实现方案

方案1:正则表达式回调实现(通用无冲突,优先推荐)

该方案通过正则匹配目标子串,在回调中直接完成互换,不存在顺序替换冲突、占位符冲突问题,适配所有场景:

import re

def swap_substrings(s: str, sub1: str, sub2: str) -> str:
    # 对两个子串做正则转义,避免子串包含特殊正则符号导致匹配错误
    pattern = re.compile(f"({re.escape(sub1)}|{re.escape(sub2)})")
    # 匹配到对应子串时直接返回另一个子串完成替换
    return pattern.sub(lambda match: sub2 if match.group() == sub1 else sub1, s)

测试用例

# 测试用例1
string_now = 'apple and avocado'
print(swap_substrings(string_now, 'apple', 'avocado')) 
# 输出:avocado and apple

# 测试用例2
string_now = 'fffffeeeeeddffee'
print(swap_substrings(string_now, 'fffff', 'eeeee'))
# 输出:eeeeefffffddffee

方案优势

  • 无顺序替换问题,单次遍历完成所有替换
  • 不需要引入临时占位符,不存在内容冲突风险
  • 自动处理子串含正则特殊字符的场景,适配性更强

方案2:临时占位符实现(无正则依赖,适合可控场景)

如果明确知道待处理字符串、两个子串中都不存在某个特殊字符串,可以用该方案,逻辑更简单无额外依赖:

def swap_substrings_simple(s: str, sub1: str, sub2: str) -> str:
    # 自定义的占位符,需要确保不会出现在s、sub1、sub2中
    placeholder = "UNIQUE_TEMP_PLACEHOLDER_123456789"
    return s.replace(sub1, placeholder)\
            .replace(sub2, sub1)\
            .replace(placeholder, sub2)

注意事项

使用前必须确认占位符不存在于待处理的三个字符串中,否则会出现替换错误。

语法适配(可选)

如果需要实现示例中str.swap()的调用方式,可以对内置字符串类做扩展(不推荐生产环境随意修改内置类,仅做语法适配):

str.swap = lambda self, sub1, sub2: swap_substrings(self, sub1, sub2)

# 调用方式和示例完全一致
string_now = 'apple and avocado'
stringthen = string_now.swap('apple', 'avocado')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 11:24:00