HOWTO · Python
Groß-/Kleinschreibung unempfindlicher Zeichenketten Vergleich in Python
Es gibt drei Hauptmethoden, um einen case-insensitive String-Vergleich in Python durchzuführen, nämlich lower(), upper() und casefold().
Auf dieser Seite
Um Python-Zeichenketten unabhängig von der Groß- und Kleinschreibung zu vergleichen, normalisieren Sie beide Zeichenketten mit derselben Methode und vergleichen anschließend die Ergebnisse. Für einfache Vergleiche eignen sich lower() oder upper(); wenn Unicode-Schreibweisen ohne Beachtung der Groß- und Kleinschreibung gleichgesetzt werden sollen, etwa ß und ss, verwenden Sie casefold().
Zeichenketten ohne Beachtung der Groß- und Kleinschreibung mit lower() vergleichen
Die eingebaute Methode lower() gibt eine Kopie der Zeichenkette in Kleinbuchstaben zurück. Wenn Sie sie vor == auf beide Werte anwenden, gelten Zeichenketten wie Hello World! und HELLO WORLD! als gleich. Die Methode führt die übliche Umwandlung der Groß- und Kleinschreibung durch, wendet aber nicht alle Unicode-Regeln für das Case-Folding an. Normalisieren Sie beide Operanden auf dieselbe Weise: Wenn Sie nur eine Seite ändern, können zwei ansonsten passende Zeichenketten weiterhin als ungleich gelten. Der Rückgabewert ist eine neue Zeichenkette; die ursprüngliche Schreibweise bleibt also für die Anzeige oder Speicherung erhalten.
Dieses eigenständige Beispiel vergleicht zwei unterschiedlich geschriebene Werte und gibt das boolesche Ergebnis aus.
first = "Hello World!"
second = "HELLO WORLD!"
print(first.lower() == second.lower())
True
Bei einer passenden Eingabe ergibt der Vergleich True. Bewahren Sie die ursprünglichen Zeichenketten auf, wenn ihre Schreibweise oder Groß-/Kleinschreibung für die Anzeige wichtig ist: lower() gibt eine neue Zeichenkette zurück und ändert keine der beiden Variablen.
Zeichenketten ohne Beachtung der Groß- und Kleinschreibung mit upper() vergleichen
Sie können genauso die eingebaute Methode upper() verwenden. Sie gibt eine Kopie in Großbuchstaben zurück. Wandeln Sie daher beide Werte mit upper() um, bevor Sie sie vergleichen. Das ist eine Alternative zu lower(); wichtig ist, für beide Seiten konsequent dieselbe Normalisierung zu verwenden. Wenden Sie also dieselbe Methode auf beide Zeichenketten an, statt einen Operanden in Klein- und den anderen in Großbuchstaben umzuwandeln.
Das Beispiel vergleicht dieselben Wörter, nachdem beide in Großbuchstaben umgewandelt wurden.
first = "Hello World!"
second = "hello world!"
print(first.upper() == second.upper())
True
Beide Ansätze sind praktisch, wenn sich die Zeichenketten durch gewöhnliche Varianten der Groß- und Kleinschreibung unterscheiden. Sie setzen jedoch nicht jede Unicode-Schreibweise gleich. Wenn der Vergleich Unicode-Zeichen ohne Beachtung der Groß- und Kleinschreibung berücksichtigen soll, verwenden Sie casefold().
Zeichenketten ohne Beachtung der Groß- und Kleinschreibung mit casefold() vergleichen
Die Methode casefold() ist für Vergleiche ohne Beachtung der Groß- und Kleinschreibung vorgesehen. Sie kann Zeichen anders umwandeln als die Kleinschreibung mit lower(). Beispielsweise lässt lower() den deutschen Buchstaben ß unverändert, während casefold() ihn in ss umwandelt. Deshalb sind die durch Case-Folding erzeugten Formen von "straße" und "STRASSE" gleich. Das ist hilfreich, wenn Unicode-Text verglichen wird und sich gleichwertige Schreibweisen nicht nur durch ASCII-Groß- und Kleinbuchstaben unterscheiden.
Wenn das Unicode-Case-Folding wichtig ist, wenden Sie casefold() auf beide Werte an und vergleichen Sie anschließend die zurückgegebenen Zeichenketten mit ==. Das folgende ausführbare Beispiel veranschaulicht den Vergleich von ß und ss.
first = "straße"
second = "STRASSE"
print(first.casefold() == second.casefold())
True
Für allgemeine Unicode-Vergleiche ohne Beachtung der Groß- und Kleinschreibung ist casefold() die passende Wahl. Bei einfacherem Text, für den die gewöhnliche Umwandlung der Groß- und Kleinschreibung ausreicht, machen lower() oder upper() die Absicht deutlich. Diese Methoden normalisieren Werte für den Vergleich, ersetzen aber nicht die ursprünglichen Zeichenketten.