HOWTO · Python

在 Python 中替換字串中的字元

瞭解如何在 Python 字串中依位置替換一個字元,或替換符合條件的字元。

本頁內容

Python 字串是不可變的,因此不能直接將新字元指定給既有字串。若要修改內容,請建立一個新的字串值。需要修改單一位置時可使用清單;需要替換符合條件的文字時可使用 replace();已知位置時則可使用切片。bytearray() 適合 ASCII 等以位元組為單位處理的資料,但它的索引指向位元組,不是一般的 Unicode 字元。

使用 list() 與 join() 替換字串中的字元

使用內建的 list() 函式將字串轉成清單,在從零開始計算的索引位置指定替換字元,再將字元重新組合成字串。請在分隔字串上呼叫 join(),以組合清單中的項目;"" 表示不插入分隔符號。例如,索引 2 指的是第三個字元:

text = "Naze"
characters = list(text)
characters[2] = "m"
updated = "".join(characters)
print(updated)
Name

這個方法只會修改一個位置,原本的字串值仍保持不變;updated 會指向重新組合後的新文字。索引必須對應到清單中的項目,因此若位置來自使用者輸入,請先確認字串長度。

使用 bytearray() 替換字串中的字元

若要處理以位元組為單位的文字,先將字串編碼,再對可變的 bytearray() 指定位元組整數值,最後將位元組解碼回字串。以下範例使用 ASCII,其中每個示範字元都以一個位元組表示:

text = "Naze"
data = bytearray(text, "ascii")
data[2] = ord("m")
updated = data.decode("ascii")
print(updated)
Name

編碼與解碼必須使用相容的字元編碼。位元組索引通常不等於 Unicode 字元索引:UTF-8 中的非 ASCII 字元可能占用多個位元組。只有在資料的編碼方式與位元組位置確實符合需求時,才使用這種方法;一般文字請使用以字串為基礎的方法。

使用 replace() 方法替換字串中符合條件的字元

以舊文字和新文字呼叫字串的 replace() 方法。預設會替換舊文字每一處互不重疊的符合項目,並將結果以新字串傳回:

text = "Naze"
updated = text.replace("z", "m")
print(updated)
Name

原本的 text 不會改變。如果只想替換有限數量的符合項目,可將數量作為選用的第三個引數傳入,例如 text.replace("a", "o", 1)。如果找不到舊文字,replace() 會傳回未變更的文字;這有助於分辨問題是拼字不符,還是指定值時出錯。

使用切片與串接替換已知位置的字元

已知從零開始計算的位置時,先取出該位置之前的前綴,接上替換字元,再附加該位置之後的後綴。切片 text[:2] 會保留索引 2 之前的位置,而 text[3:] 會從該字元之後開始:

text = "Naze"
updated = text[:2] + "m" + text[3:]
print(updated)
Name

這種寫法會建立新字串,同時保留前綴與後綴。請確認後綴從待替換字元的下一個位置開始;索引使用錯誤可能會漏掉或重複字元。若位置已知,且這種寫法適合你的用途,就可以採用;本文不比較速度。