首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 更多程式設計知識

Python 字串處理:lower() 方法完整教學與大小寫轉換應用

     編輯:更多程式設計知識

將字串轉為小寫是文字正規化、不區分大小寫比對、搜尋索引的基礎操作。Python lower() 方法回傳字串副本,將所有有大小寫之分的字母轉為小寫,非字母字元保持不變。本文詳細說明語法、Unicode 支援、邊界情況與實戰模式。

方法語法與說明

str.lower()
  • 無參數。
  • 回傳:新字串(原字串不變,字串不可變)。
  • 轉換範圍:所有 Unicode 字母類別中有大小寫對應的字元(含 ASCII、拉丁擴展、希臘、西里爾、亞美尼亞等)。
  • 不影響:數字、符號、空白、中文、日文、韓文、Emoji 等無大小寫字元。

實際程式碼範例

#!/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() vs casefold():國際化比對的關鍵差異

方法用途德語 ß土耳其語 İ希臘語 Σ
lower()一般轉小寫ßi̇σ
casefold()不區分大小寫比對(積極摺疊)ssiσ

建議: 單純顯示轉小寫用 lower();不區分大小寫比對、搜尋、去重 必須用 casefold()。

實務應用場景

1. 不區分大小寫比對


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 失敗)

2. 使用者輸入正規化


email = "  User@Example.COM  "
normalized = email.strip().lower()
print(normalized)  # user@example.com

3. 關鍵字搜尋/過濾


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']

4. 檔案副檔名判斷


filename = "Document.PDF"
if filename.lower().endswith(".pdf"):
    print("PDF 檔案")

5. 字典鍵值正規化


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'}

效能與記憶體

  • 建立新字串,原字串不變(不可變物件特性)。
  • 時間複雜度 O(N),N 為字串長度。
  • 大量轉換時,考慮 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() 回傳新字串,原字串不變。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved