描述

Python strip() 方法用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列。

注意:该方法只能删除开头或是结尾的字符,不能删除中间部分的字符。

 

用法:

str.strip([chars]);

 

以上是菜鸟教程上对于strip函数的描述,对于去除掉的内容和中间部分有点疑惑,下面通过几个示例说明

示例1:

 

 

 s_1 = 'a123a'

对于字符串 'a1231'来说,去除头尾的'a',显而易见的就得到 '123'

示例2

 

 s_2 = 'abc123abc'

 通过以上2个示例,我初步猜测strip函数就是头部和尾部同时以指定需要去除字符串的位数去扫描字符串,匹配到与指定字符串一致的字符串就删除掉

对于示例1来说,s_1头尾一个一个遍历,头部和尾部的第一个字符与需要出去的字符(a)相同,去掉之后则得到 123

对于示例2来说,s_2头尾3个3个字符遍历,头部和尾部的三个字符都与需要去除的字符串(abc)相同,去掉之后则得到123

以我初步的想法去解释示例1、示例2,好像是这样子的...那么,这个想法是正确的的么?来看看示例3

示例3:

 

 

 

 

 

 

以我之前的猜测,我以为以上的结果分别是  123*、abc*123、bc*123*、c*123*ab

然而实际上他们的输出结果都是  123

之前猜测的是匹配一致,通过这个示例,再次猜测:头部和尾部同时以指定需要去除字符串的位数去扫描字符串,匹配到与指定字符串一样,不需要位置也一样的字符串就删除掉

然后再次细想一下,头部和尾部同时逐个扫描,只要这个字符包含在指定需要删除的字符串中就删除掉。这种说法就可以解释通删除内容

那么,“中间内容”该如何去判断呢?来看示例4

示例4

 

  来猜一下这个应该输出什么呢?

正确的输出内容是:*1ab23ab*c

下面来详解一下如何得到这个结果:

分别从头部和尾部开始扫描,头部的a和尾部的b包含在ab中,则会去掉头部的a,尾部的b

-------得到bab*1ab23ab*caabab

第二次扫描,头部的b和尾部的b都包含在ab中,去掉

-------得到ab*1ab23ab*caaba

第三次扫描,头部的a和尾部的a都包含在ab中,去掉

-------得到b*1ab23ab*caab

第四次扫描,头部的b和尾部的b都包含在ab中,去掉

-------得到*1ab23ab*caa

第五次扫描,头部的*不包含在ab中,不去掉,尾部的a包含在ab中,去掉

-------得到*1ab23ab*ca 

第六次扫描,头部的*不包含在ab中,不去掉,尾部的a包含在ab中,去掉

-------得到*1ab23ab*c

第七次扫描,头部的*不包含在ab中,不去掉,尾部的c不包含在ab中,不去掉

-------得到*1ab23ab*c

则从以上推测中,我们可以知道,遇到不满足的字符则扫描结束,即从遇到不满足的字符开始就算中间部分了

 

以上只是我学习strip函数时的所想所思,根据我的这个想法,我自己写了一个与strip有相同用法的函数

def replace_fun(s_1, s_2):
    '''
    :param s_1: 移除字符串头尾指定的字符序列
    :param s_2: 原字符串
    :return: 返回移除字符串头尾指定的字符生成的新字符串
    '''
    for i in s_2:
        if i in s_1:
            s_2 = s_2.replace(i, '', 1)
        else:
            break
    for i in s_2[::-1]:
        if i in s_1:
            s_2 = s_2[::-1].replace(i, '', 1)
            s_2 = s_2[::-1]
        else:
            break
    return s_2

 

 

 

 

有错误或者别的想法,请大家多多指教。联系qq1435655338

posted on 2019-12-25 18:34  喵喵的汪汪  阅读(11132)  评论(0编辑  收藏  举报