用python替换字符串中的子字符串
我试图用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:
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,明白了吗。在这种情况下,我不建议使用正则表达式作为替代。谢谢@JesseMuimport-re;re.sub(x,y,s)
看起来您在向结果添加y后忘记跳过len(x)个字符,而是继续逐个迭代字符。您得到的输出是什么?我尝试了你的代码,但没有得到任何输出。它取代了原来的rep_str
函数;使用main
函数在代码中尝试它。很抱歉,忘记在末尾添加main()。谢谢,在看到您关于跳过应该替换的子字符串长度的输入后,我更改了代码,这是一个非常好的建议。但是,我没有考虑在else语句中向I添加1,这就是为什么我可能没有得到正确的输出。感谢您花时间查看我的代码。也感谢您的输入。我试过你的代码,它也给了我正确的输入。我从你的代码中学到了一些新东西。所以,谢谢你。