为何Python中"cisco.com".rstrip(".com")返回"cis"而非"cisco"?
为什么
"cisco.com".rstrip(".com")返回"cis"而不是"cisco"? rstrip()的参数不是按完整字符串匹配移除的——它会把参数里的每个字符当成一个独立的字符集合,只要字符串末尾的字符属于这个集合,就会被持续移除,直到碰到不在集合里的字符才停下。
拿你的例子拆解:
原字符串是"cisco.com",参数".com"对应的字符集合是{'.', 'c', 'o', 'm'}。从字符串末尾往前逐个检查:
- 末尾的
m在集合里,移除 → 剩下"cisco.co" - 下一个
o在集合里,移除 → 剩下"cisco.c" - 下一个
c在集合里,移除 → 剩下"cisco." - 下一个
.在集合里,移除 → 剩下"cisco" - 下一个
o在集合里,移除 → 剩下"cisc" - 下一个
c在集合里,移除 → 剩下"cis" - 再往前是
s,不在集合里,停止操作。
所以最终得到的是"cis"。
如果想精准移除末尾的.com完整字符串,有两种更合适的方法:
- 方法一:用
endswith()判断后切片
s = "cisco.com" if s.endswith(".com"): s = s[:-4] print(s) # 输出 "cisco"
- 方法二:用Python 3.9+新增的
removesuffix()方法
print("cisco.com".removesuffix(".com")) # 输出 "cisco"
内容的提问来源于stack exchange,提问作者Moonberry
相关产品推荐
相关产品推荐

