Python - 在没有.replace()

时间:2016-02-08 18:07:00

标签: python replace

任务是将任何字符串转换为任何没有内置.replace()的字符串。我失败了,因为我忘记了技术空间也是一个字符串字符。首先,我将此字符串转换为列表,但现在我看到我不必要地执行了此操作。但是,它仍然无法运作。

  1. 我可以代替" cat"进入"狗"
  2. 我可以替换" c"进入"狗"
  3. 我无法取代#34;一只猫"进入"狗#34;。

    我尝试使用lambdazip,但我真的不知道该怎么做。你有什么线索吗?

    string = "Alice has a cat, a cat has Alice."
    old = "a cat"
    new = "a dog"
    
    def rplstr(string,old,new):
        """ docstring"""
    
        result = ''
        for i in string:
            if i == old:
                i = new
            result += i
        return result
    
    print rplstr(string, old, new)
    

4 个答案:

答案 0 :(得分:4)

此解决方案避免了字符串连接,这可能效率较低。它创建了一个最终连接在一起的段列表:

string = "Alice has a cat, a cat has Alice."
old = "a cat"
new = "a dog"

def rplstr(string, old, new):
    """ docstring"""

    output = []
    index = 0

    while True:
        next = string.find(old, index)

        if next == -1:
            output.append(string[index:])
            return ''.join(output)
        else:
            output.append(string[index:next])
            output.append(new)
            index = next + len(old)

print rplstr(string, old, new)

,并提供:

Alice has a dog, a dog has Alice.

答案 1 :(得分:2)

您可以逐步浏览字符串,一次一个字符,然后测试它是否与old字符串的第一个字符匹配。如果匹配,则保持对索引的引用,然后继续单步执行字符,现在尝试匹配old的第二个字符。继续前进,直到匹配整个old字符串。如果完全匹配成功,请使用第一个字符匹配的索引和old字符串的长度来创建一个插入new字符串的新字符串。

def replstr(orig, old, new):
    i = 0
    output = ''
    temp = ''
    for c in orig:
        if c == old[i]:
            i += 1
            temp += c
        else:
            i = 0
            if temp:
                output += temp
                temp = ''
            output += c
        if len(temp) == len(old):
            output += new
            temp = ''
            i = 0
    else:
        if temp:
            output += temp

答案 2 :(得分:2)

你可以用切片来做:

def rplstr(string, old, new):
    for i in xrange(len(string)):
        if old == string[i:i+len(old)]:
            string = string[:i] + new + string[i+len(old):]
    return string

答案 3 :(得分:2)

您可以使用正则表达式以简单而微小的方式完成此操作。

import re

my_string = "Alice has a cat, a cat has Alice."
new_string = re.sub(r'a cat', 'a dog', my_string)
print new_string