Python API快餐教程(1) - 字串查詢API

weixin_34050427發表於2017-08-02

字串處理相關API

字串是7種序列型別中的一種。
除了序列的操作函式,比如len()來求字串長度之外,Python還為字串提供豐富到可以寫個編輯器的API.

查詢類API

首先,下面的查詢API都是為了查詢位置,或者查一共有幾次這樣的操作。
如果只是想判斷一個字串是不是另一個字串的子串的話,使用序列的in運算子就可以了。
例:

str1 = "hahahahaha,heiheihei"
  
if 'haha' in str1:
    print('haha is a substring of '+str1)
else:
    print('haha is NOT a substring of '+str1)

數數有多少個匹配的字串 - count函式

原型:str.count(sub[, start[, end]])

  • sub:要查詢的子字串
  • start:起始位置
  • end:結束位置

字串的count函式可以數出來有多少次匹配,我們看個例子,有5個ha和3個hei

str1 = "hahahahaha,heiheihei"

print(str1.count('ha'))
print(str1.count('haha'))

輸出為5和2.
haha只能匹配兩次。

再加上擴充套件引數:

print(str1.count('ha',1))
print(str1.count('ha',0,5))

不拋異常的查詢 find和rfind

find函式的行為是,如果能找到,則返回在序列中的座標,如果找不到,則返回-1. rfind是從右向左查詢。我們來看例子:

print(str1.find('haha'))
print(str1.rfind('haha'))

輸出值為0和6.

找不到的例子:

print(str1.find('hoho'))
print(str1.rfind('hi'))

輸出值都是-1.

完整形式:

  • str.find(sub[, start[, end]])
  • str.rfind(sub[, start[, end]])

會拋異常的查詢:index和rindex

index和rindex的功能與find和rfind基本上一致,除了在找不到時會丟擲ValueError異常而不是返回-1.

例:

>>> str1 = "hehe"
>>> str1.index('ha')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: substring not found

所以我們需要加try...except語句來處理之:

try:
    str1.index('hoho')
except ValueError:
    print('hoho cannot be found in '+str1)

從頭查詢和從尾查詢 startswith, endswith

有時候,我們希望做從頭匹配或者匹配尾部。這時候就要用到startswith函式和endswith函式。例:

print(str1.startswith('ha'))
print(str1.endswith('hei'))

這兩個返回值均為True.

如果需要更復雜的匹配,還是需要正規表示式。與Java等語言不同,Python中的正規表示式有專門的模組,字串的API不負責這個事情。

小結

  • 判斷字串是不是在別一個串中能找到:in
  • 判斷是否左匹配:startswith
  • 判斷是否右匹配:endswith
  • 數數能匹配多少次:count
  • 不拋異常的求匹配位置:find,rfind
  • 會拋異常的求匹配位置:index,rindex

相關文章