为何Python的strip()会移除非匹配前缀的指定字符?
Python中strip()方法“移除不匹配前缀”现象的原因解析
核心原因是:strip()方法并非匹配整个传入的参数字符串/字节串,而是将参数拆解为单个字符(字符串场景)或单个字节(字节串场景)的集合,只要目标字符串/字节串的首尾字符/字节属于这个集合,就会被持续移除,直到遇到不属于该集合的内容为止。
结合你的例子具体说明:
字符串场景
执行"谁是谁的周杰伦".strip("是谁")时,参数"是谁"会被拆分为{"谁", "是"}两个独立字符的集合。
原字符串的开头依次是"谁"→"是"→"谁",这三个字符都属于集合内的元素,因此会被逐一移除;直到遇到第一个不属于集合的字符"的",才停止处理开头部分,最终得到结果'的周杰伦'。字节串场景
对应字节串的情况同理:- 参数
bytes("是谁", encoding='UTF-8')即b'\xe6\x98\xaf\xe8\xb0\x81',会被拆分为{b'\xe6', b'\x98', b'\xaf', b'\xe8', b'\xb0', b'\x81'}这几个单个字节的集合。 - 原字节串
b'\xe8\xb0\x81\xe6\x98\xaf\xe8\xb0\x81\xe7\x9a\x84...'的开头字节依次是\xe8→\xb0→\x81→\xe6→\x98→\xaf→\xe8→\xb0→\x81,这些字节全部属于上述集合,因此会被持续移除;直到遇到第一个不属于集合的字节\xe7(对应字符“的”的UTF-8编码首字节),才停止处理,最终剩下的字节串对应字符串就是"的周杰伦"。
- 参数
如果需要精准匹配并移除整个前缀/后缀字符串,Python 3.9及以上版本提供了str.removeprefix()和str.removesuffix()方法,比如"谁是谁的周杰伦".removeprefix("谁是")会得到"谁的周杰伦",只会移除完全匹配的前缀。
内容的提问来源于stack exchange,提问作者jeeppen
相关产品推荐
相关产品推荐

