訂單表單送來的名字是「 MAYA chen 」,後面還掛著一個換行,因為客人怎麼說話就怎麼打字。查價之前,這段文字得先洗乾淨,又不能把原件弄壞。哪些方法會回傳新字串,又該怎麼留住原來的值?
真實世界裡的文字往往很亂:多餘空格、大小寫不一致,多個欄位擠在一個字串裡。字串方法會回傳新的字串或列表,讓你搭建一條清晰的文字清理流程,同時不改變原值。 你還會規範化一組雜亂輸入,並在檢查後解包一條記錄。
先清理兩端
strip() 會去掉字串兩端的空白。lower() 和 upper() 改變大小寫。這些方法都回傳新字串,不會修改原字串。需要同時處理時,可以鏈式呼叫。
raw = " MAYA "
clean = raw.strip().lower()
print(clean)
print(raw)鏈式呼叫字串方法
拆分與連接
split(separator) 把字串變成欄位列表。join(iterable) 把一個字串集合合併成一個字串。join 前面的字串就是分隔符。
row = "拿鐵,4.5,2"
fields = row.split(",")
print(fields)
print(" | ".join(fields))類似 CSV 的文字
替換與切片
replace(old, new) 會替換所有比對的子串。切片讀取一段字元:text[0:4] 從索引 0 開始,到索引 4 之前結束。負索引從末尾開始計數。
text = "hello world"
print(text.replace("world", "Python"))
print(text[0:5])
print(text[-5:])替換與切片
比較前先規範化
使用者輸入常有額外空格和大小寫差異。比較前先規範化:逐項 strip()、轉小寫,再用清晰的分隔符連接。如果顯示需要保留大小寫,就把原始值和規範化後的鍵分開儲存。
raw = " Latte, Tea ,Mocha "
items = [part.strip().lower() for part in raw.split(",")]
print(items)
print(" | ".join(items))先清理每個欄位,再連接
先分割、檢查,再解包
split() 把一條記錄拆成欄位,解包再給每個欄位命名。切片可以取出年份、月份這類固定位置。處理真實資料前先檢查欄位數量,少一個欄位就會觸發 ValueError。
record = "2026-10-28|latte|4.50"
parts = record.split("|")
if len(parts) == 3:
date, name, price = parts
print(date[:4], date[5:7], date[8:10])
print(name.capitalize(), float(price))
else:
print("invalid record")解包前先檢查欄位數量
先檢查形狀,再轉換
startswith()、endswith() 和 removeprefix() 可以在轉換之前檢查文字的結構。先轉換再驗證,會把兩種失敗混在一起:資料格式不對,以及 ValueError。先確認貨幣符號,再去掉它,最後轉換。形狀不對時回傳清晰的錯誤,不要讓 float() 決定錯誤資訊。
raw = "$4.50"
if raw.startswith("$"):
amount = float(raw.removeprefix("$"))
print(f"{amount:.2f}")
else:
print("缺少貨幣符號")先驗證前綴,再轉換
本課要點
- 字串方法回傳新值,原字串不會被修改。
- strip 去掉兩端空白,replace 替換精確的子串。
- split 把文字拆成欄位,join 把欄位重新合成文字。
- 切片不包含結束索引對應的字元。
- 比較使用者輸入前,先統一大小寫和空白。
- 在呼叫 float() 或 int() 之前,先驗證文字的格式。
常見錯誤
- 對列表直接呼叫 strip,而不是對列表中的每個字串呼叫。
- 對數字列表呼叫 join,卻沒有先把數字轉成字串。
- 以為 text[1:3] 會包含索引 3 的字元。
- 先 split 再忘記逐項 strip,欄位裡留下多餘空格。
- 對仍然含有貨幣符號的文字呼叫 float()。
清理一個帶空格的姓名,拆分逗號分隔的訂單,再用短橫線把欄位連接起來。
動手試試
改改變數、先預測輸出,再執行程式碼。第一次點擊「執行程式碼」時會下載 Python 執行時,可能需要幾秒鐘。
練習本課
12 道題,作答後立即看到解釋。