任务是将任何字符串转换为任何没有内置.replace()
的字符串。我失败了,因为我忘记了技术空间也是一个字符串字符。首先,我将此字符串转换为列表,但现在我看到我不必要地执行了此操作。但是,它仍然无法运作。
我无法取代#34;一只猫"进入"狗#34;。
我尝试使用lambda
或zip
,但我真的不知道该怎么做。你有什么线索吗?
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)
答案 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