將字串轉為小寫是文字正規化、不區分大小寫比對、搜尋索引的基礎操作。Python lower() 方法回傳字串副本,將所有有大小寫之分的字母轉為小寫,非字母字元保持不變。本文詳細說明語法、Unicode 支援、邊界情況與實戰模式。
str.lower()
#!/usr/bin/python3
# 範例 1:基本 ASCII
s1 = "THIS IS STRING EXAMPLE....WOW!!!"
print(s1.lower()) # this is string example....wow!!!
# 範例 2:混合大小寫
s2 = "HeLLo WoRLd 123 !@#"
print(s2.lower()) # hello world 123 !@#
# 範例 3:非 ASCII 字母
s3 = "STRASSE" # 德語街道
print(s3.lower()) # strasse(注意:ß 無大寫,SS→ss)
s4 = "ΣΤΡΑΤΟΣ" # 希臘語
print(s4.lower()) # στρατος
s5 = "ЖИЗНЬ" # 西里爾字母
print(s5.lower()) # жизнь
# 範例 4:無大小寫字元(保持不變)
s6 = "你好世界 123 😀"
print(s6.lower()) # 你好世界 123 😀
# 範例 5:空字串
print("".lower()) # ""
# 範例 6:特殊 Unicode 情況
# 德語 ß (U+00DF) 無大寫,大寫為 "SS"
print("ß".upper().lower()) # ss(非原字元)
# 土耳其語 İ (U+0130) 小寫為 i (U+0069) + ̇ (U+0307)
print("İ".lower()) # i̇(兩字元)
| 方法 | 用途 | 德語 ß | 土耳其語 İ | 希臘語 Σ |
|---|---|---|---|---|
| lower() | 一般轉小寫 | ß | i̇ | σ |
| casefold() | 不區分大小寫比對(積極摺疊) | ss | i | σ |
建議: 單純顯示轉小寫用 lower();不區分大小寫比對、搜尋、去重 必須用 casefold()。
def case_insensitive_equal(a, b):
return a.casefold() == b.casefold()
print(case_insensitive_equal("Straße", "STRASSE")) # True(用 casefold)
print(case_insensitive_equal("Straße", "STRASSE".lower())) # False(用 lower 失敗)
email = " User@Example.COM "
normalized = email.strip().lower()
print(normalized) # user@example.com
keywords = ["python", "django", "flask"]
text = "I love Python and DJANGO!"
found = [kw for kw in keywords if kw in text.lower()]
print(found) # ['python', 'django']
filename = "Document.PDF"
if filename.lower().endswith(".pdf"):
print("PDF 檔案")
raw_data = {"UserName": "John", "EMAIL": "john@example.com"}
normalized = {k.lower(): v for k, v in raw_data.items()}
print(normalized) # {'username': 'John', 'email': 'john@example.com'}
bytes.lower() 或記憶體檢視 memoryview 避免複製(進階)。| 方法 | 功能 | 範例 |
|---|---|---|
| lower() | 全轉小寫 | "HELLO" → "hello" |
| upper() | 全轉大寫 | "hello" → "HELLO" |
| capitalize() | 首字大寫、其餘小寫 | "hELLO" → "Hello" |
| title() | 每單字首字大寫 | "hello world" → "Hello World" |
| swapcase() | 大小寫互換 | "HeLLo" → "hEllO" |
| casefold() | 積極摺疊(比對用) | "Straße" → "strasse" |
lower() 是字串小寫轉換的標準方法,支援完整 Unicode。關鍵區別:**顯示用途用 lower(),比對/搜尋/去重用 casefold()**。搭配 strip()、upper() 等方法,能構建完整的文字正規化管線。記住字串不可變,lower() 回傳新字串,原字串不變。