Wie führe ich einen Stringvergleich ohne Berücksichtigung der Groß- und Kleinschreibung durch?
Wie kann ich tun, groß-und Kleinschreibung string-Vergleich in Python?
Ich würde gerne Kapseln Vergleich: eine reguläre Zeichenfolgen, um eine repository-string in eine sehr einfache und Pythonic way. Ich möchte auch die Möglichkeit haben, zu suchen, bis die Werte in einem dict-Hash von strings mit regulären python-strings.
InformationsquelleAutor der Frage Kozyarchuk | 2008-11-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vorausgesetzt ASCII-strings:
InformationsquelleAutor der Antwort Harley Holcombe
Vergleich von Zeichenfolgen in groß-und Kleinschreibung Weg scheint wie etwas, das ist trivial, aber es ist nicht. Ich werde mich mit Python 3, da Python 2 ist unterentwickelt hier.
Ist die erste Sache, zu beachten, dass Fall-entfernen im unicode-Konvertierungen sind nicht trivial. Es ist der text für die
text.lower() != text.upper().lower()
wie"ß"
:Aber lassen Sie uns sagen, Sie wollten caselessly vergleichen
"BUSSE"
und"Buße"
. Heck, Sie wahrscheinlich wollen auch vergleichen"BUSSE"
und"BUẞE"
gleich - das ist die neuere Kapitals bilden. Der empfohlene Weg ist die Verwendungcasefold
:Nicht
lower
. Wenncasefold
ist nicht verfügbar, tut.upper().lower()
hilft (aber nur etwas).Dann sollten Sie Akzente. Wenn Ihr font-renderer ist gut, denken Sie wahrscheinlich
"ê" == "ê"
- muss es aber nicht:Dies ist, weil Sie eigentlich
Die einfachste Möglichkeit, damit umzugehen, ist
unicodedata.normalize
. Sie wollen wahrscheinlich verwenden NFKD Normalisierung, aber fühlen Sie sich frei, um die Dokumentation zu kontrollieren. Dann tut manZu beenden, ist dies hier ausgedrückt in Funktionen:
InformationsquelleAutor der Antwort Veedrac
Mit Python 2, Aufruf
.lower()
auf alle string-oder Unicode-Objekt......wird die meiste Zeit funktionieren, aber in der Tat nicht die Arbeit in der Situationen, @tchrist beschrieben hat.
Angenommen, wir haben eine Datei namens
unicode.txt
mit den zwei SaitenΣίσυφος
undΣΊΣΥΦΟΣ
. Mit Python 2:Dem Σ-Zeichen hat zwei kleine Formen, ς und σ, und
.lower()
wird nicht helfen, vergleichen Sie Sie Fall-unempfindlich.Jedoch, wie der Python 3, alle drei Formen aufgelöst wird, ς, und das untere() auf beide strings korrekt funktioniert:
Also wenn Sie um den Rand-Fällen, wie bei den drei sigmas in der griechischen, verwenden Python 3.
(Für Referenz, Python 2.7.3 und Python 3.3.0b1 gezeigt, sind in der interpreter-Ausdrucke oben).
InformationsquelleAutor der Antwort Nathan Craike
Abschnitt 3.13 der Unicode-standard definiert-algorithmen für caseless
das matching.
X.casefold() == Y.casefold()
in Python 3 implementiert die "Standard-caseless matching" (D144).Casefolding nicht die Erhaltung der Normalisierung von strings, die in allen Instanzen und damit die Normalisierung durchgeführt werden muss (
'å'
vs.'å'
). D145 stellt das "kanonische caseless matching":NFD()
ist zweimal genannt, für sehr seltene Sonderfälle mit U+0345 Charakter.Beispiel:
Gibt es auch die Kompatibilität caseless matching (D146) für Fälle wie
'㎒'
(U+3392) und "Bezeichner caseless-matching" zu vereinfachen und zu optimieren caseless matching von Bezeichnern.InformationsquelleAutor der Antwort jfs
Sah ich diese Lösung hier mit regex.
Klappt es auch mit Akzenten
Aber es funktioniert nicht mit unicode-Zeichen, die groß-und Kleinschreibung. Danke @Rhymoid für den Hinweis, das ist mein Verständnis war, dass es muss die genaue symbol, für den Fall, um wahr zu sein. Die Ausgabe ist wie folgt:
InformationsquelleAutor der Antwort Shiwangi
Wie etwa die Umwandlung in Kleinbuchstaben zuerst? Sie können
string.lower()
.InformationsquelleAutor der Antwort Camilo Díaz Repka
Ist die übliche Vorgehensweise ist zu groß-die Saiten-oder Kleinschreibung Sie für die Suchvorgänge und Vergleiche. Zum Beispiel:
InformationsquelleAutor der Antwort Glomek
InformationsquelleAutor der Antwort Patrick Harrington
Wenn Sie Listen mit strings und vergleichen Sie die Zeichenfolgen in andere Liste mit groß-und Kleinschreibung. Hier ist meine Lösung.
Nachdem Sie das getan, können Sie string-Vergleich easly.
InformationsquelleAutor der Antwort caesar
Ich habe diese verwendet werden, um etwas zu erreichen mehr nützlich für den Vergleich von zwei strings:
Update: Wie bereits von gerritdiese Antwort hat einige bugs. Das ist schon Jahre her ist und ich mich nicht mehr erinnern, was ich benutzt habe. Ich erinnere mich, dass das schreiben von tests, aber was sind Sie nun!
InformationsquelleAutor der Antwort Chris