Python strip方法移除指定子串时为何会额外删除末尾的e字符
Python strip方法异常行为原因
核心原理
str.strip(chars) 并不是按照完整子串匹配来移除内容,它的参数chars是一个字符集合:方法会从字符串的首尾两端同时遍历,删除所有属于chars集合内的单个字符,直到遇到第一个不在集合内的字符才终止操作。
测试用例现象解释
你传入的参数"router_"对应的字符集合为 {'r','o','u','t','e','_'},结合两个测试用例的差异:
- 第一组测试字符串结尾是
e:e属于上述字符集合,因此会被删除,最终输出sdkf12 - 第二组测试字符串结尾是
a:a不在上述字符集合中,所以末尾不会被裁剪,最终输出sdkf12a
正确移除固定前缀的方案
如果你需要精准移除开头的router_前缀,不要用strip,推荐以下方案:
- Python 3.9及以上版本,直接使用前缀匹配方法:
test = "router_sdkf12e" print(test.removeprefix("router_")) # 输出 sdkf12e
- 低版本Python可以用切片实现:
prefix = "router_" test = "router_sdkf12e" if test.startswith(prefix): test = test[len(prefix):] print(test) # 输出 sdkf12e
内容的提问来源于stack exchange,提问作者Rahul Kumbhar
相关产品推荐
相关产品推荐

