文字與字串 string
字串是 Python 裡最常使用的序列,可以包含字母、數字、符號、標點甚至空格、換行,這篇教學會介紹文字與字串基本的用法。
快速導覽:建立字串、轉義、前方加上 r、結合字串、重複字串、取得字元與字串、len() 取得字串長度、split() 拆分、replace() 替換、strip() 剝除、搜尋和選擇、大小寫
本篇使用的 Python 版本為 3.7.12,所有範例可使用 Google Colab 實作,不用安裝任何軟體 ( 參考:使用 Google Colab )
建立字串
使用將字元 ( 字母、符號或數字 ) 放在一對「單引號」或「雙引號」裡,就可製作為一個 Python 字串。
print("hello") # hello
print('hello') # hello
單引號和雙引號可以互相搭配使用,當單引號被雙引號包覆時,單引號為字串,當雙引號被單引號包覆時,雙引號為字串。
print("'oxxo' is my name") # 'oxxo' is my name
print('"oxxo" is my name') # "oxxo" is my name
如果是「多行字串」( 文字很多且會換行 ),則可將多行字串,放在「連續三個」單引號或雙引號裡,就會原封不動的印出結果。
a = """Millions of developers and companies build,
ship, and maintain their software on GitHub—the
largest and most advanced development platform
in the world."""
print(a)
此外,也可以使用「str()
」,將資料轉換成字串,下方的程式將數字 123 轉換為字串 123。
a = str(123)
print(a) # '123'
轉義
「轉義」表示「轉換字串內一些字元的含義」,只要在需要轉換的字元前方,加上「反斜線 \」,就能賦予其特殊意義,常用的轉義字元有下面幾種:
轉義字元 | 說明 |
---|---|
\ ( 放在一行結尾 ) |
接續下一行 |
\\ |
顯示反斜線 |
\' |
顯示單引號 |
\" |
顯示雙引號 |
\b |
刪除前一個字元 |
\n |
換行 |
\t |
tab 鍵 |
下方的例子,在一行字串裡,使用轉義字元,讓結果同時顯示單引號、雙引號和反斜線。
a = 'hello "World", my name is \'oxxo\', \\_\\'
print(a)
# hello "World", my name is 'oxxo', \_\
下方的例子,將一行文字根據「\n」進行換行。
a = 'hello World,\nmy name is oxxo,\nhow are you?'
print(a)
# hello World,
# my name is oxxo,
# how are you?
前方加上 r
如果在字串的前方加上「r」,表示這個字串為「raw string」,不要進行轉義,下方的程式碼執行後,a 會印出「\n」( 因為不進行轉義 ),b 則會將 \n 轉義為換行,就會印出換行的結果。
a = r'123\n456'
b = '123\n456'
print(a) # 123\n456
print(b)
# 123
# 456
結合字串
結合字串有三種方式:「+ 號、字串後方放置、括號」,結合的字串「不會加上空格」,所以空格要自己補上。
使用「+ 號」可以針對「變數」與「字串」進行結合。
a = 'hello'
b = ' world' # 前方補上空格
c = a + b + '!!!'
print(c)
# hello world!!!
使用「字串後方放置」只能針對「字串」( 不是變數 ) 進行結合。
a = 'hello' ' world' '!!!'
print(a)
# hello world!!!
如果有很多字串,可以將其放在「括號」裡進行結合。
a = ('a' "b" 'c' "'" 'ok' "'")
print(a)
# abc'ok'
重複字串
在字串後方使用「*」加上數字,可以指定該字串要重複幾次,下方的例子,會將 ok 重複 10 次。
a = 'ok'*10
print(a)
# okokokokokokokokokok
如果變數是字串,也可以使用 * 進行重複,下圖的例子,會出現 20 個 ok。
a = 'ok'*5
b = a * 4
print(b)
# okokokokokokokokokokokokokokokokokokokok
取得字元與字串
使用「 [ ] 」可以取得某個字元 ,因為每個字元在字串中都有各自的「順序 offset」,從左邊數來第一個順序為 0,接下來是 1,如果指定 -1 則會選擇最右邊的字元,-2 則是右邊數來的第二個,依此類推。
a = 'hello world'
print(a[0]) # h ( 第一個字元 )
print(a[3]) # l ( 第四個字元 )
print(a[-1]) # d ( 最後一個字元 )
如果要取得某一串文字,可以使用「slice」的方式,定義 slice 的方式為一組方括號、一個 start ( 開始順序 )、一個 end ( 結尾順序 ) 和一個中間的 step ( 間隔 ),常見的規則如下:
定義 | 說明 |
---|---|
[ : ] | 取出全部字元,從開始到結束 |
[ start: ] | 取出從 start 的位置一直到結束的字元 |
[ :end ] | 取出從開始一直到 end 的「前一個位置」字元 |
[ start:end ] | 取出從 start 位置到 end 的「前一個位置」字元 |
[ start:end:step ] | 取出從 start 位置到 end 的「前一個位置」字元,並跳過 step 個字元 |
a = '0123456789abcdef'
print(a[:]) # 0123456789abcdef ( 取出全部字元 )
print(a[5:]) # 56789abcdef ( 從 5 開始到結束 )
print(a[:5]) # 01234 ( 從 0 開始到第 4 個 ( 5-1 ) )
print(a[5:10]) # 56789 ( 從 5 開始到第 9 個 ( 10-1 ) )
print(a[5:-3]) # 56789abc ( 從 5 開始到倒數第 4 個 ( -3-1 ) )
print(a[5:10:2]) # 579 ( 從 5 開始到第 9 個,中間略過 2 個 )
len() 取得字串長度
len() 函式可以取得一串字串的長度 ( 總共幾個字元 ),取得的長度不包含轉義字元,下方的例子會顯示變數 a 的字串長度。
a = '0123456789_-\\\"\''
print(len(a)) # 15,不包含三個反斜線 \
split() 拆分
split() 函式可以將一個字串,根據指定的「分隔符號」,拆分成「串列」 ( 串列就是許多值組成的序列,將許多值包覆在方括號裡,並使用逗號分隔 )。
a = 'hello world, I am oxxo, how are you?'
b = a.split(',') # 以逗號「,」進行拆分
c = a.split(' ') # 以空白字元「 」進行拆分
d = a.split() # 如果不指定分隔符號,自動以空白字元進行拆分
print(b) # ['hello world', ' I am oxxo', ' how are you?']
print(c) # ['hello', 'world,', 'I', 'am', 'oxxo,', 'how', 'are', 'you?']
print(d) # ['hello', 'world,', 'I', 'am', 'oxxo,', 'how', 'are', 'you?']
replace() 替換
replace() 函式可以進行簡單的字串替換,replace() 函式有三個參數「舊的字串,新的字串,替換的數量」,如果沒有指定數量,就會將內容所有指定的字串替換成新的字串。
如果要進行更複雜規則的取代,就必須要使用「正規表達式」。
a = 'hello world, lol'
b = a.replace('l','XXX')
c = a.replace('l','XXX',2)
print(b) # heXXXXXXo worXXXd, XXXoXXX ( 所有的 l 都被換成 XXX )
print(c) # heXXXXXXo world, lol ( 前兩個 l 被換成 XXX )
strip() 剝除
strip() 函式可以去除一段字串開頭或結尾的某些字元,使用 rstrip() 函式可以只去除右邊,使用 lstrip() 函式可以只去除左邊,括號內可以填入指定的字元,就會將開頭或結尾指定的字元剝除。
a = ' hello!!'
b = a.strip()
e = a.strip('!')
c = a.lstrip()
d = a.rstrip()
print(b) # hello!!
print(c) # hello!!
print(d) # hello!!
print(e) # hello
搜尋和選擇
如果要搜尋字串中的某個字,可以使用「find()」或「index()」兩個函式,函式預設從左側開始找起,找到指定的字串或字元時,會回傳第一次出現的位置 ( offset ),如果改成「rfind()」或「rindex()」就會從右側找起,找到指定的字串或字元時,會回傳最後一次出現的位置 ( offset ),如果沒有找到結果,find() 會回報 -1 的數值,index() 會直接顯示錯誤訊息。
a = 'hello world, I am oxxo, I am a designer!'
b = a.find('am')
c = a.rfind('am')
print(b) # 15 ( 第一個 am 在 15 的位置 )
print(c) # 26 ( 最後一個 am 在 26 的位置 )
下方列出一些好用的搜尋與選擇函式:
函式 | 說明 |
---|---|
startswith() | 判斷開頭字串,符合 True,不符合 False |
endswith() | 判斷結尾字串,符合 True,不符合 False |
isalnum() | 判斷是否只有字母和數字,符合 True,不符合 False |
count() | 計算字串出現了幾次 |
a = 'hello world, I am oxxo, I am a designer!'
b = a.startswith('hello')
c = a.endswith('hello')
d = a.isalnum()
e = a.count('am')
print(b) # True ( 開頭是 hello )
print(c) # False ( 結尾不是 hello )
print(d) # False ( 裡面有逗號和驚嘆號 )
print(e) # 2 ( 出現兩次 am )
大小寫
Python 針對字串的大小寫,有四種內建的轉換函式可以使用:
函式 | 說明 |
---|---|
title() | 單字字首字母變大寫 |
upper() | 所有字母變大寫 |
lower() | 所有字母變小寫 |
swapcase() | 單字字母的大小寫對調 |
a = 'Hello world, I am OXXO'
b = a.title()
c = a.upper()
d = a.lower()
e = a.swapcase()
print(b) # Hello World, I Am Oxxo
print(c) # HELLO WORLD, I AM OXXO
print(d) # hello world, i am oxxo
print(e) # hELLO WORLD, i AM oxxo
意見回饋
如果有任何建議或問題,可傳送「意見表單」給我,謝謝~