Python有內置的字符串類型, 內置的字符串是序列(Sequence), 是不可變的序列, 所以不可變序列通用的方法對其都適用.
對Python2, 內置的字符串類型有str和unicode,
Python2
'abc' 是str, u'中國123' 是unicode
# Python2.7 >>> type('abc') <type 'str'> >>> type(u'中國123') <type 'unicode'>
如果我們使用Python2, 應該都盡量使用unicode,就算是純英文的.
Python3
但在Python3中, 沒有預定義unicode類型了,內置字符串就是str, 但是str中的字符都是unicode編碼的
#Python3.3 >>> type(u'中國') <class 'str'> >>> type('abc') <class 'str'> >>> type(str) <class 'type'> >>> type(unicode) NameError: name 'unicode' is not defined
下面討論一些Python內置字符串常用的方法, Python2中這些方法對str和unicode基本都是一樣的, 沒有討論到的去文檔查閱就行,基本上需要的功能都有方法實現.
字符串分隔, split
str.split()接受分隔字符串, 返回分隔后的一個list
>>> s = 'wangyu@lvye.cn' >>> s.split('@') ['wangyu', 'lvye.cn']
如果同一個分隔符連續多個存在,則在返回結果中會有空字符串
>>> s = 'wangyu@@@@lvye.cn' >>> s.split('@') ['wangyu', '', '', '', 'lvye.cn']
4個連續的@產生了3個空串
當分隔字符串是多字符的,必須是全匹配
>>> s = 'abc<>cba' >>> s.split('<>') ['abc', 'cba']
一個反面例子
>>> s = 'abc<>cba%$acb' >>> s.split('<>$') ['abc<>cba%$acb']
str.split()也可以不接受參數,這時候是使用空格做分隔,且不產生空串,如果開頭和結尾有空格,也會被忽略掉
>>> s = ' we are the champion' >>> s.split() ['we', 'are', 'the', 'champion']
子串替換
str.replace(old, new [, count])
replace把old替換成new,並且可以指定替換個數, 而且函數返回一個copy,不會影響原來的str對象.
>>> s = 'he is nate, nate is his name' >>> s.replace('nate', 'sky') 'he is sky, sky is his name' >>> s 'he is nate, nate is his name'
子串查找
字串查找用find()或index(), 其中index()是序列通用的方法
不同的是若沒找到find()返回-1, index()拋出異常ValueError, 找到返回字串索引.
find()和index()的語法相同
str.find(substr [, start [, end]])
普通使用
>>> s='we are are the champion' >>> s.find('ar') 3
加上范圍
>>> s='we are are the champion' >>> s.find('ar', 4) 7
注意,如果只是想知道一個字符串是否包含一個子串,使用 in
>>> s = 'we are the champion' >>> 'are' in s True
字符串的strip
同樣的strip會copy一份原來的字串進行處理.
不加任何參數,去除左右的空格
>>> s = ' www.lvye.cn ' >>> s.strip() 'www.lvye.cn'
帶上參數
>>> s.strip('wcn. ') 'lvye'
注意帶上參數時,空格要顯示指定.
strip還可以去除兩端的換行符
字符串其它的方法
- isalpha() 是否都是字母
- isdigit() 是否都是數字
- upper() 都轉化為大寫
Python str的方法,Python文檔中很全.
-------------------------
參考: