首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么在第一次调用后没有全部替换'ana‘?

为什么在第一次调用后没有全部替换'ana‘?
EN

Stack Overflow用户
提问于 2021-11-05 10:27:28
回答 2查看 52关注 0票数 0

为什么只有在第二次调用之后,'ana‘才被替换为'banana’?请帮忙:

代码语言:javascript
复制
prop="ana anastasia ana ana re ana ana mere ana"
prop=" "+prop+" "
s = 'ana'
t = 'banana' 
prop=prop.replace(" "+s+" "," "+t+" ")
print(prop)  # banana anastasia banana ana re banana ana mere banana
prop=prop.replace(" "+s+" "," "+t+" ")
print(prop)  # banana anastasia banana banana re banana banana mere banana
EN

回答 2

Stack Overflow用户

发布于 2021-11-05 10:30:21

在您的第一次评估中,_ana_ana_被读作_ana_+ana_ (NB为清晰起见,请使用空格作为下划线(_) )。

只有第一个符合要替换的条件,一旦第一个_ana_字符串被使用,第二个就会丢失一个空格。

您需要替换的数量与由单个空格隔开的ana单词数量一样多。

一种解决方法是使用\b作为分隔符的正则表达式:

代码语言:javascript
复制
prop="ana anastasia ana ana re ana ana mere ana"

import re
re.sub(rf'\b{s}\b', t, prop)

输出:'banana anastasia banana banana re banana banana mere banana'

票数 0
EN

Stack Overflow用户

发布于 2021-11-05 10:39:07

我用_来代表太空。在这里,当您将"ana“替换为"banana”时,整个"_ana_"将被替换。替换后,甚至连空格都被替换了,所以光标会直接跳到next ana的"a“,所以这个不会被替换。在第二次调用之后,我们有了"_ana_",所以这一次它会再次将它替换为banana,你会得到你想要的结果。这里的要点是:

替换后,光标将直接跳到下一个ana的"a“

相反,您可以使用split()函数检查每个单词,如果是=="ana“,则将其更改为"banana”

代码语言:javascript
复制
prop="ana anastasia ana ana re ana ana mere ana"
s1=""
for i in prop.split():
    if i=="ana":
        s1+="banana"+" "
    else:
        s1+=i+" "
print(s1)  # banana anastasia banana banana re banana banana mere banana 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69851817

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档