Python,在保留原始字符串的同时替换字符串中的字符

时间:2017-03-29 17:52:25

标签: python python-3.x

更具体地说:

给定一个字符串和一个非空字符串,返回原始字符串的一个版本,其中所有字符都被字符串(“+”)替换,但字符串的外观保持不变。

def(base,word):
plusOut("12xy34", "xy") → "++xy++"
plusOut("12xy34", "1") → "1+++++"
plusOut("12xy34xyabcxy", "xy") → "++xy++xy+++xy"

我最初的想法是:

def main():

    x = base.split(word)  
    y = ''.join(x)
    print(y.replace(y,'+')*len(y))

从这里开始,我无法将这个词重新插入到正确位置的str中。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:1)

您可以使用join的任何字符串(而不是像您一样使用空字符串''。)

def plusOut(s, word):
    x = s.split(word)
    y = ['+' * len(z) for z in x]
    final = word.join(y)
    return final

编辑:我已删除了正则表达式,但我将该功能保持在多行以更接近原始代码。

答案 1 :(得分:0)

不需要正则表达式。我们可以在没有任何库的情况下解决这个问题,只需迭代一次。

我们希望遍历字符串的索引i,如果从i开始的len(word)切片与单词匹配,则产生单词并通过len(单词)向前跳,并且通过屈服' +& #39;否则增加一个。

def replace_chars_except_word(string, word):
    def generate_chars():
        i = 0  
        while i < len(string):
            if string[i:(i+len(word))] == word:
                i += len(word)
                yield word
            else:
                yield '+'
                i+= 1
    return ''.join(generate_chars())


if __name__ == '__main__':    
    test_string = 'stringabcdefg string11010string1'
    result = replace_chars_except_word(test_string, word = 'string')
    assert result == 'string++++++++string+++++string+'

我使用内部生成器函数来生成字符串,但您可以使用缓冲区来替换内部函数。 (这稍微降低了内存效率)。

buffer = [] if (condition) buffer.append(word) else: buffer.append'+' return ''.join(buffer)