为何Python的replace()方法替换'is'为'are'时会同时替换'this'中的'is'?
字符串替换现象的原因解析
先看你执行的两次操作及结果:
第一次代码:
print("This is it!".replace("is", "are"))
输出:
Thare are it!
反向操作代码:
print("Thare are it!".replace("are", "is"))
输出:
This is it!
核心原因
Python的str.replace()方法默认会替换字符串中所有匹配到的子串,不管这个子串是不是独立的单词:
- 第一次替换时,原字符串
"This is it!"里有两处"is":一处是"This"末尾的"is",另一处是空格后的独立"is"。两个"is"都被替换成"are",所以"This"变成"Thare",独立"is"变成"are",最终得到"Thare are it!"。 - 反向替换时,
"Thare are it!"里有两处"are":一处是"Thare"末尾的"are",另一处是空格后的独立"are"。两个"are"都被替换成"is","Thare"变回"This",独立"are"变回"is",就还原成了最初的字符串。
如果只想替换独立的单词(避免匹配单词内部的子串),可以用正则表达式的单词边界匹配:
import re # 只替换独立的"is",输出"This are it!" print(re.sub(r'\bis\b', 'are', "This is it!"))
内容的提问来源于stack exchange,提问作者Davide
相关产品推荐
相关产品推荐

