- Python 3.7從零開始學
- 劉宇宙
- 3066字
- 2019-12-06 14:02:27
4.3 字符串方法
第3章介紹了很多列表的方法,字符串的方法比列表還多,因為字符串從string模塊中“繼承”了很多方法。
因為字符串的方法比較多,所示這里只介紹一些特別有用的方法,全部方法見附錄A。
4.3.1 find()方法
find()方法用于檢測字符串中是否包含子字符串str。如果指定beg(開始)和end(結束)范圍,就檢查是否包含在指定范圍內。如果包含子字符串,就返回開始的索引值;否則返回-1。
find()方法的語法如下:
str.find(str, beg=0, end=len(string))
此語法中,str代表指定檢索的字符串;beg代表開始索引,默認為0;end代表結束索引,默認為字符串的長度。返回結果為子串所在位置的最左端索引,如果沒有找到,就返回-1。
該方法使用示例如下:
>>> field='do it now' >>> field.find('do') 0 >>> field.find('now') 6 >>> field.find('python') -1
由輸出結果看到,如果找到字符串,就返回對應的索引值;如果沒找到字符串;就返回-1。
提 示
字符串的find方法返回的不是布爾值。如果返回0,就表示在索引0處找到了子字符串。
find方法還可以接受參數,用于表示起始點和結束點,例如:
>>> field.find('it',2) #提供起點 3 >>> field.find('it',5) #提供起點 -1 >>> field.find('it',0,3) #提供起點和終點 -1 >>> field.find('it',0,5) 3 >>> field.find('it',5,10) -1
由輸出結果看到,可以通過使用起始值和終止值查找指定的范圍內是否存在指定字符串。
4.3.2 join()方法
join()方法用于將序列中的元素以指定字符連接成一個新字符串。
join()方法的語法如下:
str.join(sequence)
此語法中,str代表指定檢索的字符串,sequence代表要連接的元素序列。返回結果為指定字符連接序列中的元素后生成的新字符串。
該方法使用示例如下:
>>> num=[1,2,3,4] >>> mark='+' >>> mark.join(num) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: sequence item 0: expected str instance, int found >>> num.join(mark) Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: 'list' object has no attribute 'join' >>> field=['1','2','3','4','5'] >>> print('連接字符串列表:',mark.join(field)) 連接字符串列表: 1+2+3+4+5 >>> field.join(mark) Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: 'list' object has no attribute 'join' >>> dirs='','home','data','hdfs' >>> print('路徑:','/'.join(dirs)) 路徑: /home/data/hdfs
由輸出結果看到,進行join操作時,調用和被調用的對象都必須是字符串,任意一個不是字符串都會報錯。
4.3.3 lower()方法
lower()方法用于將字符串中所有大寫字符轉換為小寫。
lower()方法的語法如下:
str.lower()
此語法中,str代表指定檢索的字符串,該方法不需要參數。返回結果為字符串中所有大寫字符轉換為小寫后生成的字符串。
該方法使用示例如下:
>>> field='DO IT NOW' >>> print('調用lower得到字符串:',field.lower()) 調用lower得到字符串: do it now >>> greeting='Hello,World' >>> print('調用lower得到字符串:',greeting.lower()) 調用lower得到字符串: hello,world
由輸出結果看到,字符串中的大寫字母全部轉換為小寫字母了。
如果想要編寫“不區分大小寫”的代碼,就可以使用lower方法。如果想要在一個字符串中查找某個子字符串并忽略大小寫,也可以使用lower方法,操作如下:
>>> field='DO IT NOW' >>> field.find('It') #都不轉換為小寫,找不到匹配字符串 -1 >>> field.lower().find('It') #被查找字符串不轉換為小寫,找不到匹配字符串 -1 >>> field.lower().find('It'.lower()) #使用lower方法轉換成小寫后查找 3
由輸出結果看到,字符串全部轉換為小寫后能匹配到對應子串。
提 示
有時類似于lower這樣的字符串方法并不能如我們所愿進行工作。對于英文字符串,lower方法在處理時一點問題都沒有;對于非英文字符串,lower方法在處理時可能不如我們的預期,如中文、挪威文等。
4.3.4 upper()方法
upper()方法用于將字符串中的小寫字母轉換為大寫字母。
upper()方法語法如下:
str.upper()
此語法中,str代表指定檢索的字符串,該方法不需要參數。返回結果為小寫字母轉換為大寫字母的字符串。
該方法使用示例如下:
>>> field='do it now' >>> print('調用upper得到字符串:',field.upper()) 調用upper得到字符串: DO IT NOW >>> greeting='Hello,World' >>> print('調用upper得到字符串:',greeting.upper()) 調用upper得到字符串: HELLO,WORLD
由輸出結果看到,字符串中的小寫字母全部轉換為大寫字母了。
如果想要編寫“不區分大小寫”的代碼,就可以使用upper方法。如果想要在一個字符串中查找某個子字符串并忽略大小寫,也可以使用upper方法,操作如下:
>>> field='do it now' >>> field.find('It') #都不轉換為大寫,找不到匹配字符串 -1 >>> field.upper().find('It') #被查找字符串不轉換為大寫,找不到匹配字符串 -1 >>> field.upper().find('It'.upper()) #使用upper方法轉換為大寫后查找 3
由輸出結果看到,字符串全部轉換為大寫后能找到對應子串。
4.3.5 swapcase()方法
swapcase()方法用于對字符串的大小寫字母進行轉換,將字符串中的大寫字母轉換為小寫、小寫字母轉換為大寫。
swapcase()方法的語法如下:
str.swapcase()
此語法中,str代表指定檢索的字符串,該方法不需要參數。返回結果為大小寫字母轉換后生成的新字符串。
該方法使用示例如下:
>>> field='Just do it,NOW' >>> print('原字符串:',field) 原字符串: Just do it,NOW >>> print('調用swapcase方法后得到的字符串:',field.swapcase()) 調用swapcase方法后得到的字符串: jUST DO IT,now
由輸出結果看到,調用該方法后,輸出結果中的大寫字母變為小寫、小寫字母變為大寫。該方法進行大小寫轉換非常方便。
4.3.6 replace()方法
replace()方法把字符串中的old(舊字符串)替換成new(新字符串),如果指定第3個參數max,替換次數就不超過max次。
replace()方法的語法如下:
str.replace(old, new[, max])
此語法中,str代表指定檢索的字符串;old代表將被替換的子字符串;new代表新字符串,用于替換old子字符串;max代表可選字符串,替換次數不超過max次。返回結果為字符串中的old(舊字符串)替換成new(新字符串)后生成的新字符串,如果指定第3個參數max,替換次數就不超過max次。
該方法使用示例如下:
>>> field='do it now,do right now' >>> print('原字符串:',field) 原字符串: do it now,do right now >>> print('新字符串:',field.replace('do','Just do')) 新字符串: Just do it now,Just do right now >>> print('新字符串:',field.replace('o','Just',1)) 新字符串: dJust it now,do right now >>> print('新字符串:',field.replace('o','Just',2)) 新字符串: dJust it nJustw,do right now >>> print('新字符串:',field.replace('o','Just',3)) 新字符串: dJust it nJustw,dJust right now
由上面的輸出結果看到,當不指定第3個參數時,所有匹配字符都替換;指定第3個參數時,替換從左往右進行,替換次數不超過指定次數。
4.3.7 split()方法
split()方法通過指定分隔符對字符串進行切片,如果參數num有指定值,就只分隔num個子字符串。這是一個非常重要的字符串方法,是join的逆方法,用來將字符串分割成序列。
split()方法的語法如下:
str.split(st="", num=string.count(str))
此語法中,str代表指定檢索的字符串;st代表分隔符,默認為空格;num代表分割次數。返回結果為分割后的字符串列表。
該方法使用示例如下:
>>> field='do it now' >>> print('不提供任何分割符分隔后的字符串:',field.split()) 不提供任何分割符分隔后的字符串: ['do', 'it', 'now'] >>> print('根據i分隔后的字符串:',field.split('i')) 根據i分隔后的字符串: ['do ', 't now'] >>> print('根據o分隔后的字符串:',field.split('o')) 根據o分隔后的字符串: ['d', ' it n', 'w'] >>> print('根據o分隔1次后的字符串:',field.split('o',1)) 根據o分隔1次后的字符串: ['d', ' it now']
由輸出結果看到,如果不提供分隔符,程序就會把所有空格作為分割符。操作中可以指定分隔符和分割次數,若指定分割次數,則從左往右檢索和分隔符匹配的字符,分割次數不超過指定次數;若不指定分割次數,則所有匹配的字符都會被分割。
4.3.8 strip()方法
strip()方法用于移除字符串頭尾指定的字符(默認為空格)。
strip()方法的語法如下:
str.strip([chars])
此語法中,str代表指定檢索的字符串,chars代表移除字符串頭尾指定的字符。返回結果為移除字符串頭尾指定的字符生成的新字符串。
該方法使用示例如下:
>>> field='----do it now----' >>> print('原字符串:',field) 原字符串: ----do it now---- >>> print('新字符串:',field.strip('-')) 新字符串: do it now >>> st='----do -- it -- now----' >>> print('原字符串:',st) 原字符串: ----do -- it -- now---- >>> print('新字符串:',st.strip('-')) 新字符串: do -- it -- now
由操作結果看到,strip方法只去除頭尾匹配的字符,中間匹配的字符不會去除。
4.3.9 translate()方法
translate()方法根據參數table給出的表(包含256個字符)轉換字符串的字符,將要過濾掉的字符放到del參數中。
translate()方法的語法如下:
str.translate(table[, deletechars])
此語法中,str代表指定檢索的字符串;table代表翻譯表,翻譯表通過maketrans方法轉換而來;deletechars代表字符串中要過濾的字符列表。返回結果為翻譯后的字符串。
該方法使用示例如下:
>>> intab='adefs' >>> outtab='12345' >>> trantab=str.maketrans(intab,outtab) >>> st='just do it' >>> print('st調用translate方法后:',st.translate(trantab)) st調用translate方法后: ju5t 2o it
由輸出結果看到,有幾個字符被替換成數字了,被替換的字符既在intab變量中,又在st變量中,如圖4-1所示。對于既在intab中,又在st中的字符,使用outtab中對應的字符替換。由圖4-1可知,intab中的字符d對應outtab中的字符2、字符s對應字符5,所以最后輸出字符串中的s被替換成5、d被替換成2,這樣就得到了最后我們看到的字符串ju5t 2o it。

圖4-1 字符串對應關系
translate方法和replace方法一樣,可以替換字符串中某些部分。和replace方法不同的是,translate方法只處理單個字符。translate方法的優勢在于可以同時進行多個替換,有時比replace方法效率高得多。
- Mastering JavaScript Functional Programming
- TensorFlow Lite移動端深度學習
- Reactive Programming with Swift
- JavaScript Unlocked
- Learn React with TypeScript 3
- Apache Mahout Clustering Designs
- Getting Started with Gulp
- 批調度與網絡問題的組合算法
- Instant Lucene.NET
- 一塊面包板玩轉Arduino編程
- HTML5秘籍(第2版)
- C語言程序設計簡明教程:Qt實戰
- .NET Standard 2.0 Cookbook
- HTML5+CSS3+JavaScript 從入門到項目實踐(超值版)
- Get Your Hands Dirty on Clean Architecture