iT邦幫忙

2023 iThome 鐵人賽

DAY 7
0
Software Development

跟著 OXXO 一起學 Python系列 第 12

( Day 7.1 ) Python 文字與字串 string

  • 分享至 

  • xImage
  •  

字串是 Python 裡最常使用的序列,可以包含字母、數字、符號、標點甚至空格、換行,這篇教學會介紹文字與字串基本的用法。

原文參考:文字與字串 string

本篇使用的 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

更多教學

大家好,我是 OXXO,是個即將邁入中年的斜槓青年,我有個超過一千篇教學的 STEAM 教育學習網,有興趣可以參考下方連結呦~ ^_^


上一篇
( Day 6.3 ) Python 內建函式 ( 數學計算 )
下一篇
( Day 7.2 ) Python 文字與字串 ( 格式化 )
系列文
跟著 OXXO 一起學 Python101
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言