用python替换字符串中的子字符串

用python替换字符串中的子字符串,python,Python,我试图用python替换字符串中的每个子字符串实例。下面是我所做的代码,它给了我一些奇怪的结果 def main(): s='IN GOING GO' x='IN' y='aa' print(rep_str(s,x,y)) def rep_str(s,x,y): result="" if x in s: for i in range(len(s)): if s[i:i+len(x)] == x:

我试图用python替换字符串中的每个子字符串实例。下面是我所做的代码,它给了我一些奇怪的结果

def main():
    s='IN GOING GO'
    x='IN'
    y='aa'

    print(rep_str(s,x,y))

def rep_str(s,x,y):
    result=""
    if x in s:
        for i in range(len(s)):
            if s[i:i+len(x)] == x:
                result=result+y
            else:
                result=result+s[i+1:i+len(x)]          

    return result


main()
我不允许使用替换方法。事实上,我的函数应该做python中replace函数所做的事情。下面是我得到的输出

aa GOIaaG GO
如果有人能给我一些关于如何改变逻辑以获得正确输出的输入,我将不胜感激。
aa GOaaG GO.

如果您只想获得结果,请尝试:

import re
re.sub(r'IN','aa','IN GOING GO')
但是如果您需要一些逻辑,那么您应该比较与模式长度相同的块,而不是逐字符比较

@Zag asnwer更好,因为它可以比较更长的模式,并且在不匹配的情况下有返回,但是如果您想让代码运行,您需要在有如下匹配时跳过:

def rep_str(s,x,y):
    result=""
    skip = False
    if x in s:
        for i in range(len(s)):
            if skip:
                skip = False
                continue
            if s[i:i+2] == x:
                result+=y
                skip = True
            else:
                result+=s[i:i+1] 
        return result
    else:
        return s

但是当您使用
rep_str(“示例测试”、“测试”、“函数”)
调用函数时,您的代码将不起作用。

正如我在评论中提到的,错误在于匹配后没有跳过
len(x)
字符。此外,中的
关键字是相当高级的例程(它不少于搜索搜索和替换的一部分),因此这里有一个固定版本,
中没有

def rep_str(string, search, replacement):
    result = ''
    i = 0
    while i < len(string):
        if string[i : i + len(search)] == search:
            result += replacement
            i += len(search)
        else:
            result += string[i]
            i += 1
    return result
def rep_str(字符串、搜索、替换):
结果=“”
i=0
当我
如果允许使用index()函数,可以尝试以下操作:

def main():
    s='IN GOING GO'
    x='IN'
    y='aa'

    print(rep_str(s,x,y))


def rep_str(s,x,y):
    while x in s:
        s = s[:s.index(x)] + y + s[s.index(x) + len(x):]

    return s


main()

为什么不允许使用替换方法?最佳实践是使用内置的字符串方法。@Will可以用于学习等目的。这就像练习编写排序函数或创建ADTsAh,明白了吗。在这种情况下,我不建议使用正则表达式作为替代。谢谢@JesseMu
import-re;re.sub(x,y,s)
看起来您在向结果添加y后忘记跳过len(x)个字符,而是继续逐个迭代字符。您得到的输出是什么?我尝试了你的代码,但没有得到任何输出。它取代了原来的
rep_str
函数;使用
main
函数在代码中尝试它。很抱歉,忘记在末尾添加main()。谢谢,在看到您关于跳过应该替换的子字符串长度的输入后,我更改了代码,这是一个非常好的建议。但是,我没有考虑在else语句中向I添加1,这就是为什么我可能没有得到正确的输出。感谢您花时间查看我的代码。也感谢您的输入。我试过你的代码,它也给了我正确的输入。我从你的代码中学到了一些新东西。所以,谢谢你。