首页 > 解决方案 > 如何同时用2个字符串替换一个字符串

问题描述

我需要("AB")通过具有一个 input 的函数同时用另外 2 个字符串(A -> -BF+AFA+FB- 和 B -> +AF-BFB-FA+ )替换一个字符串(sequence)

到目前为止,我有:

def replace_function(sequence):
    for i in sequence:
        string = sequence.replace("A","-BF+AFA+FB-").replace("B","+AF-BFB-FA+")
    return string

replace_function("AB")

>>> -+AF-BFB-FA+F+AFA+F+AF-BFB-FA+-+AF-BFB-FA+

但是,我需要:

replace_function("AB")
>>> -BF+AFA+FB-+AF-BFB-FA+

标签: pythonstringfunctionreplace

解决方案


到目前为止,每个答案都将问题解释为 - 将 A 替换为包含 As 和 Bs 的 X,将 B 替换为可能还包含 As 和 Bs 的 Y(我认为这是预期的问题)。

OP 询问了 A 和 B 放在一起的特定情况,并且可能打算传递更大的序列,其中 AB 应该被单个实体替换,但 'ABB' 应该以 >> 的形式出现-BF+AFA+FB-+AF-BFB-FA+B,而不是 -BF+AFA+FB-+AF-BFB-FA++AF-BFB-FA+

假设是这种情况,这是我与其他解决方案略有不同的答案,考虑到“AB”应该一起处理

def replace_function(sequence):
    new_string = ''
    for idx, s in enumerate(sequence):
        if idx < len(sequence) - 1:
            if sequence[idx] == 'A' and sequence[idx + 1] == 'B':
                new_string += "-BF+AFA+FB-+AF-BFB-FA+"
            elif sequence[idx - 1] == 'A' and sequence[idx] == 'B':
                continue
            else:
                new_string += s
        elif sequence[idx - 1] != 'A':
            new_string += s
    print(new_string)


replace_function("AB")  # -BF+AFA+FB-+AF-BFB-FA+
replace_function("ABC")  # -BF+AFA+FB-+AF-BFB-FA+C
replace_function("ABCBA")  # -BF+AFA+FB-+AF-BFB-FA+CBA
replace_function("ABCBAB")  # -BF+AFA+FB-+AF-BFB-FA+CB-BF+AFA+FB-+AF-BFB-FA+

推荐阅读