Python的lstrip()方法是如何从左侧移除字符的?
Python str.lstrip() 移除规则说明
你对lstrip方法的原有认知存在偏差,该方法的核心运行规则如下:
- 传入的参数不是需要匹配的前缀字符串,而是一个包含所有要被移除字符的无序集合
- 方法会从字符串最左侧开始逐字符遍历,只要当前字符属于参数对应的字符集合就会被移除,直到遇到第一个不在集合内的字符即停止,返回剩余的字符串
- 未传入参数时,默认移除左侧所有空白字符(空格、换行符、制表符等)
你的测试用例解释
用例1:'htp://www.abc.com'.lstrip('/')
你传入的参数对应的字符集合为{'/'},字符串第一个字符为h,不在该集合内,方法直接停止运行返回原字符串,因此得到输出'htp://www.abc.com'。
你之前预期的「移除到遇到/为止」是错误逻辑,lstrip不会主动向后查找目标字符,只会从最左端开始逐个匹配字符集合。
用例2:'htp://www.abc.com'.lstrip('/:pth')
你传入的参数对应的字符集合为{'/', ':', 'p', 't', 'h'},逐字符匹配过程如下:
- 第1位
h在集合内,移除 - 第2位
t在集合内,移除 - 第3位
p在集合内,移除 - 第4位
:在集合内,移除 - 第5位
/在集合内,移除 - 第6位
/在集合内,移除 - 第7位
w不在集合内,停止运行
最终返回剩余字符串'www.abc.com',和你得到的输出一致。
拓展:精准移除前缀的方法
如果你需要精确移除固定前缀,不要用lstrip避免出现误删问题,Python 3.9及以上版本提供了专门的removeprefix()方法,示例:
'htp://www.abc.com'.removeprefix('htp://') # 输出:'www.abc.com'
内容的提问来源于stack exchange,提问作者meallhour
相关产品推荐
相关产品推荐

