Python编程-内置函数strip踩坑
背景
我们都知道 strip 是用来删除首尾字符串的,在做项目的时候发现很多的bug都是这函数的使用不当(理解不正确)造成的,因此有必要深入研究一下
比如:
1 | "abc2123".strip("123") |
本来是想去除尾部的 123 ,期望获取到的结果是 abc2 ,结果把最末尾的 2 也去除了
原理
为什么会这样呢?我们来看看官方的解释:链接
最外侧的前导和末尾 chars 参数值将从字符串中移除。 开头端的字符的移除将在遇到一个未包含于 chars 所指定字符集的字符时停止。 类似的操作也将在结尾端发生。
结合上面的例子,翻译成人话就是,开头或结尾的每个字符,只要出现在 ‘123’ 这个列表中,就会剔除,并不是说匹配 123 这个整体,然后再剔除(这是很多人的误区),后面还说,只要遇到某个字符不包含在 123 里面,就会停止剔除操作,比如下面这个例子:
1 | "ab1c123".strip("123") |
可以看到由于 c 阻隔了 1 和 123,所以没有被剔除,lsrtip 和 rstrip 也是一样的原理
解决方案
当你不确定目标字符串具体长什么样的时候,还是推荐使用 replace 或者 正则 re.sub
1 | "abc2123".replace("123", "") |
1 | re.sub("123", "", "abc2123") |
sub的参数:pattern, new string, origin string
2022/3/12 更新
去掉指定的任意字符,不会按顺序
1 | s2 = "@#@!@cxs_have_a_big_dick!@#@!#@" |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Chen's Blog!
评论