1. 程式人生 > >Python字串操作之字串搜尋與替換

Python字串操作之字串搜尋與替換

11、字串中的搜尋和替換

11.1 str.find():正序字串查詢函式
函式原型:
str.find(substr [,pos_start [,pos_end ] ] )
返回str中第一次出現的substr的第一個字母的標號,如果str中沒有substr則返回-1,也就是說從左邊算起的第一次出現的substr的首字母標號。

引數說明:
str:代表原字串
substr:代表要查詢的字串
pos_start:代表查詢的開始位置,預設是從下標0開始查詢
pos_end:代表查詢的結束位置

#查詢字串'dd'第一次出現的位置
>>> 'acddl123'.find('dd'
) 2 #查詢第一次出現空格的位置 >>> 'acdd l1 23'.find(' ') 4 #指定查詢的起始位置和結束位置 >>> 'acdd l1 23'.find(' ',3 ,6) 4 #未找到返回-1 >>> 'acdd l1 23'.find(' ',5 ,6) -1 #只指定查詢的起始位置(不能只指定查詢的結束位置) >>> 'acdd l1 23'.find(' ',5 ) 7

11.2 str.index():正序字串查詢函式
index()函式類似於find()函式,在Python中也是在字串中查詢子串第一次出現的位置,跟find()不同的是,未找到則丟擲異常。
函式原型:
str.index(substr [, pos_start, [ pos_end ] ] )
引數說明:
str:代表原字串
substr:代表要查詢的字串
pos_start:代表查詢的開始位置,預設是從下標0開始查詢
pos_end:代表查詢的結束位置

#查詢字串中第一次出現空格的位置
>>> 'acdd l1 23'.index(' ')
4
#未找到時丟擲ValueError異常
>>> 'acdd l1 23'.index('   ')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: substring not found
#指定起始查詢位置
>>> 'acdd l1 23'.index(' ',5)
7
#指定起始查詢位置和結束查詢位置
>>> 'acdd l1 23'.index(' ',5,9) 7

11.3 str.rfind():倒序字串查詢函式
函式原型:
str.rfind( substr [, pos_start [,pos_ end ] ])
返回str中最後出現的substr的第一個字母的標號,如果str中沒有substr則返回-1,也就是說從右邊算起的第一次出現的substr的首字母標號。

引數說明:
str:代表原字串
substr:代表要查詢的字串
pos_start:代表查詢的開始位置,預設是從下標0開始查詢
pos_end:代表查詢的結束位置

#查詢最後一次出現字母'd'的位置
>>> 'adsfddf'.rfind('d')
5
#指定查詢的開始和結束位置查詢
>>> 'adsfddf'.rfind('d',3,5)
4
#指定開始查詢的位置進行查詢
>>> 'adsfddf'.rfind('d',3)
5
#未找到返回-1
>>> 'adsfddf'.rfind('d6')
-1

11.4 str.rindex():倒序字串查詢函式
rindex()函式類似於rfind()函式,在Python中也是在字串中倒序查詢子串最後一次出現的位置,跟rfind()不同的是,未找到則丟擲異常。
函式原型:
str.rindex(substr [, pos_start, [ pos_end ] ] )
引數說明:
str:代表原字串
substr:代表要查詢的字串
pos_start:代表查詢的開始位置,預設是從下標0開始查詢
pos_end:代表查詢的結束位置

#倒序查詢最後一次出現字母'd'的位置
>>> 'adsfddf'.rindex('d')
5
#指定查詢的開始和結束位置開始查詢
>>> 'adsfddf'.rindex('d',3,6)
5
>>> 'adsfddf'.rindex('fd',3,6)
3
#未找到丟擲ValueError異常
>>> 'adsfddf'.rindex('d6')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: substring not found

11.5 str.replace():字串替換函式
函式原型:
str.replace(oldstr, newstr [, count])
把str中的oldstr替換成newstr,如果指定了count引數,表示替換最多不超過count次。如果未指定count引數,表示全部替換,有多少替換多少。

#指定替換次數
>>> 'aabbdssdf12sdaacddaa'.replace('aa','-',2)
'-bbdssdf12sd-cddaa'
#不指定替換次數,將字串中全部\n去掉,可以理解去全部替換為None了
>>> 'a\nsd\r\t\n'.replace('\n','')
'asd\r\t'
#將字串中全部的'.'去掉
>>> 'a....sd\r\t....\n'.replace('.','')
'asd\r\t\n'

11.6 str.count():計算字串中某個子串的個數
函式原型:
str.count(substr, [start, [end] ])
在字串str中統計子串substr出現的次數,如果不指定開始位置start和結束位置end,表示從頭統計到尾。

#統計子串'aa'在原字串中出現的總次數
>>> 'aadgdxdfadfaadfgaa'.count('aa')
3
>>> 'aadaadfgaa'.count('d')
2
#從下標為3的位置開始統計子串'aa'出現的次數
>>> 'aadgdxdfadfaadfgaa'.count('aa',3)
2
#在下標為3和6的位置開始統計子串'aa'出現的次數,但不包括6
>>> 'aadgdxdfadfaadfgaa'.count('aa',3,6)
0

11.7 str.expandtabs():將tab字元替換成空格
函式原型:
str.expandtabls([tabsize])
將str字串中的tab字元替換成tabsize個空格,預設是8個空格。

#使用默認個數的空格替換字串中的tab字元
>>> 'a  v       f'.expandtabs()
'a       v       f'
#將tab字元替換成2個空格
>>> 'a  v       f'.expandtabs(2)
'a v f'