更具体地说:
给定一个字符串和一个非空字符串,返回原始字符串的一个版本,其中所有字符都被字符串(“+”)替换,但字符串的外观保持不变。
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中。任何帮助表示赞赏。
答案 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)