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

时间:2014-02-15 21:13:37

标签: 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:
                result=result+y
            else:
                result=result+s[i+1:i+len(x)]          

    return result


main()

我不允许使用替换方法。事实上,我的函数应该做替换python中的函数。以下是我得到的输出。

aa GOIaaG GO

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

3 个答案:

答案 0 :(得分:3)

正如我在评论中提到的,错误在于您在比赛后没有跳过len(x)个字符。另外in关键字是相当高级的例程(它不低于搜索 搜索和替换的一部分),所以这里是没有{{的固定版本1}}:

in

答案 1 :(得分:1)

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

import re
re.sub(r'IN','aa','IN GOING GO')

但如果你需要一些逻辑,那么你应该比较与模式长度相同的块,而不是char的char

@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("A example test","test", "function")调用该函数时,您的代码将无效。

答案 2 :(得分:1)

如果允许使用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()