01
开始之前, 先看一行代码
In [44]: "review.rb".strip(".rb")
猜猜结果是什么
按照目前我的理解结果应该是这样
"review"
但正确结果是
In [44]: "review.rb".strip(".rb")
Out[44]: 'eview'
02
google了一下, 还是没弄懂到底是为什么?
只好找官网了
看到这里就明白了, 原来在strip的时候, ".rb"并不是一个整体, 而是三个字符, 会移除以"." "r", "b"开头或结尾的字符, 当遇到非"." "r" "b"三个字符的时候, 就会停止查找.
03
在看几个例子就明白了
# 删除开头的rb和结尾的.rb
In [45]: "rbeview.rb".strip(".rb")
Out[45]: 'eview'
# 删除开头的br和结尾的.rb
In [46]: "breview.rb".strip(".rb")
Out[46]: 'eview'
# 删除结尾的.rb(a开头, 没有在".", "r", "b"中)
In [47]: "areview.rb".strip(".rb")
Out[47]: 'areview'
# 删除开头的rb.和结尾的.rb
In [48]: "rb.eview.rb".strip(".rb")
Out[48]: 'eview'
# 删除结尾的.rb(a开头)
In [49]: "arb.eview.rb".strip(".rb")
Out[49]: 'arb.eview'
所以在使用时应注意, 可以使用lstrip, rstrip
In [50]: "review.rb".lstrip(".rb")
Out[50]: 'eview.rb'
In [51]: "review.rb".rstrip(".rb")
Out[51]: 'review'
也可以使用 replace
In [52]: "review.rb".replace(".rb", "")
Out[52]: 'review'
04
python官方文档
https://docs.python.org/zh-cn/3/library/stdtypes.html?highlight=strip#str.strip
strip源码
https://github.com/python/cpython/blob/master/Objects/bytesobject.c#L1875
https://github.com/python/cpython/blob/master/Objects/bytesobject.c#L1916