我试图使用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的输入,我会很感激。
发布于 2014-02-15 13:47:40
正如我在评论中提到的,错误在于您没有在匹配之后跳过len(x)
字符。此外,in
关键字是相当高级别的例程(它不少于search中搜索和替换的一部分),因此这里是没有in
的固定版本。
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
发布于 2014-02-15 13:18:44
如果您只想得到结果,请尝试:
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("A example test","test", "function")
调用该函数时,您的代码将无法工作。
发布于 2014-02-15 15:16:40
如果允许使用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()
https://stackoverflow.com/questions/21803731
复制相似问题