描述
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