HOWTO · Python

如何在 Python 中使用 if 判斷字串

了解如何在 Python 中使用 if 判斷字串內容、檢查子字串或允許的輸入,以及依需求進行不區分大小寫的比對。

本頁內容

在 Python 中,使用 if 搭配 == 比較字串內容,搭配 in 檢查子字串或允許的輸入;若比較時不需區分英文字母大小寫,可以先呼叫 lower() 等方法。請依照實際需求選擇條件:字串比較預設會區分大小寫,而 is 比較的是物件身分,不是文字內容是否相等。

基本字串比較

兩個字串應包含相同文字時使用 ==,應包含不同文字時使用 !=。比較運算式兩側的名稱都必須先定義,條件才能執行。若想進一步了解,請參閱Python 字串比較。

以下範例會檢查姓名是否相符:

name = "Alice"
if name == "Alice":
    print("Hello, Alice!")
else:
    print("You're not Alice.")

Python 比較字串時會區分大小寫,因此 "Alice" == "alice" 的結果是 false。如果要比較的是長度而非內容,也可以使用 len():

word1 = "Python"
word2 = "Programming"
if len(word1) < len(word2):
    print(f"{word1} is shorter than {word2}")
else:
    print(f"{word1} is not shorter than {word2}")

<、>、<= 和 >= 會依 Unicode 碼位以字典序比較字串;這些運算子不會判斷詞義,也不保證符合所有語言的字母排序規則。若要排序並呈現給使用者,請採用適合該語言與地區設定的排序方式。

使用 in 關鍵字檢查字串

用於字串時,in 會檢查左側文字是否出現在右側字串中,也就是檢查子字串。這項檢查會區分大小寫,而且不要求符合的文字必須是獨立單字:

sentence = "Python is awesome"
if "awesome" in sentence:
    print("The sentence contains 'awesome'")

若要檢查輸入是否與數個允許的字串之一完全相同,請使用集合。以下範例會先將使用者的回覆轉成小寫,再檢查它是否在清單中:

user_input = "y"
if user_input.lower() in ["y", "yes", "yeah"]:
    print("User agreed")
else:
    print("User did not agree")

如需了解子字串檢查及相關寫法,請參閱Python 檢查字串是否包含另一個字串。若要尋找字串中重複出現的內容,請參閱找出字串中所有字元出現位置。

不區分大小寫的字串比較

若比較時不應受大小寫影響,請先將兩側文字正規化。簡單比對時常用 lower();若要對 Unicode 文字進行更完整的不區分大小寫比對,則可使用 casefold()。正規化會改變比較方式,因此只有在需求確實是不區分大小寫時才使用。

user_input = "YES"
if user_input.lower() == "yes":
    print("Affirmative response received")

同樣的方式也能用於集合成員檢查:

color = "RED"
if color.lower() in ["red", "blue", "green"]:
    print("Color accepted")
else:
    print("Color not accepted")

可使用 lower() 或 upper() 進行一般的大小寫轉換。更多範例請參閱在 Python 中將字串轉成小寫或大寫。

進階字串比較

判斷易位詞(anagram)

將字元排序後,可以簡單檢查兩個字串是否包含數量相同的字元:

word1 = "listen"
word2 = "silent"
if sorted(word1) == sorted(word2):
    print("The words are anagrams")

這種做法會把大寫與小寫視為不同字元,也會將空格和標點符號納入比較。如果不想比較這些字元,請先正規化字串或篩除它們。

使用字串方法

startswith() 和 endswith() 等方法可直接表達前綴與後綴檢查:

filename = "document.txt"
if filename.endswith(".txt"):
    print("Text file detected")

組合多個條件

可用 and、or 和 not 組合條件。使用 and 時,每個子條件都必須成立,整體條件才會成立:

name = "John Doe"
if name.startswith("John") and " " in name:
    print("Name matches the expected format")

這只是簡單的文字檢查,無法驗證所有可能的姓名格式。

比較物件身分

is 會檢查兩個名稱是否指向同一個物件。若要比較字串內容,請使用 ==;物件身分並不能可靠地用來判斷文字是否相等。

first = "Python"
second = "Python"
if first == second:
    print("The strings have equal contents")

結論

比較字串內容時使用 == 或 !=;檢查子字串或集合成員時使用 in;需要忽略大小寫時再進行正規化。前綴和後綴檢查可使用字串方法。比較文字是否相等請用 ==;is 判斷的是另一件事:物件身分。

常見問題

Python 的字串比較會區分大小寫嗎?

會。預設情況下,"Python" 和 "python" 是不同的字串。若比較時要忽略大小寫,請先正規化兩個值。

if 語句可以檢查多個字串條件嗎?

可以。用 and 或 or 連接條件;若加上括號能讓條件分組更清楚,也可以使用括號。

== 和 is 有什麼差別?

== 比較值;is 檢查兩個參照是否指向同一個物件。比較字串內容時請使用 ==。

如何檢查字串是否以特定文字開頭或結尾?

呼叫 startswith() 或 endswith(),例如 filename.endswith(".txt")。

可以在 if 條件中使用正規表示式嗎?

可以。當比對規則需要模式時,可在條件中呼叫 Python re 模組的函式,例如 re.search(pattern, text)。若只需檢查簡單的子字串,使用 in 通常更直接。