第1篇:Python删除开头或结尾“指定顺序”字符串,用strip是错误的

2023-05-16

起因

昨天快下班时,老板临时交代做个功能:获取URL中最后的文件名,不要后缀。

对于10年编码经验的我来说,这还不简单?小意思,2分钟给你搞定!

代码敲起来

语言学过很多不算牛,能记清才算牛。

我就经常记混,每次用之前都得搜索一下,于是输入关键字“python trim”

原来,python修剪字符串前后指定字符串,没有trim,但能用strip替代。

url = '***/apple.html'
filename = url.split('/')[-1].strip('.html')
print(filename)
复制代码

输出结果:

apple
复制代码

搞定,老板可以上线了!

偶然性报错

今天一大早到公司,老板说昨天你写的那个功能有问题。

不可能啊,我敢百分百保证。

老板说,不信你自己看看。

于是我去看了下,果然发现原本以为“不可能”的错误,当出现下面这种情况时,就出错了:

url = '***/peach.html'
复制代码

结果为:

peac
复制代码

啊,怎么会?

定位

好吧,我看下哪里有问题:

url = '***/peach.html'
filename = url.split('/')[-1].strip('.html')
print(url.split('/')[-1]) 
print(url.split('/')[-1].strip('.html'))
复制代码

输出结果为:

peach.html
peac
复制代码

果然是strip有问题,仔细百度了一下。

原来,strip是可以从前后两端往中间方向修剪指定字符,但不按指定字符顺序,只要出现的字符都会被修剪掉,直到发现第一个非指定字符为止。

也就是说,peach.html的h.html都会被修剪掉。

解决

有一种最简单,但不严谨的做法,就是用replace替代:

url = '***/peach.html'
filename = url.split('/')[-1].replace('.html', '')
print(filename)
复制代码

不出所料,结果为正确的peach。

因为是网址,所以.html肯定出现在最后,所以用这种办法没问题,如果不是这种场景呢?

在回答这个问题之前,我不禁对一直以来深信不疑的php 的 trim函数也产生了怀疑。

于是立刻敲了起来:

<?php
$str = "peach.html";
echo trim($str,".html");
复制代码

果然,trim也是有这个问题,以上代码也是输出peac。

这个php例子先搁一边,回到python例子,如何正确地修剪指定顺序的字符串呢?

终极方案

如果是去除最左边的指定顺序字符串,可以让replace带上第三个参数(替换次数)肯定没问题:

url = 'old old peach.html'
filename = url.replace('old', '', 1)
print(filename)
复制代码

以上代码只会做一次replace,即只会删除最开头的old,会保留之后的old。

如果去除最右边的指定顺序字符串:

import re
url = '***/peach.html'
url = re.sub(r'.html$', '', url)
print(url)
复制代码

使用正则,就可以删除结尾的字符串.html

当然了,也可以使用正则去掉开头的指定字符串,读者可以自己去试一下。

欢迎关注我:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

第1篇:Python删除开头或结尾“指定顺序”字符串,用strip是错误的 的相关文章

随机推荐