我正在尝试使用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。
答案 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()