Python: Wie überprüft man, ob eine Unicode-Zeichenkette ein verklemmtes Zeichen enthält?

8

Ich mache einen Filter, bei dem ich überprüfe, ob eine Unicode-Zeichenfolge (utf-8-Codierung) keine Großbuchstaben enthält (in allen Sprachen). Es ist in Ordnung für mich, wenn die Zeichenfolge überhaupt keinen verkleinerten Charakter enthält.

Zum Beispiel: "Hallo!" Übergibt den Filter nicht, aber "!" sollte den Filter passieren, da "!" ist kein verkleinerter Charakter.

Ich plante, die islower () -Methode zu verwenden, aber im obigen Beispiel wird "!". islower () gibt False zurück.

Laut den Python-Dokumenten, "Die Python-Unicode-Methode islower () gibt True zurück, wenn die verkleinerten Zeichen der Unicode-Zeichenkette alle Kleinbuchstaben sind und die Zeichenkette mindestens ein verkapseltes Zeichen enthält. Andernfalls wird False zurückgegeben."

Da die Methode auch False zurückgibt, wenn die Zeichenfolge kein verklemmtes Zeichen enthält, z. "!", Möchte ich überprüfen, ob die Zeichenfolge überhaupt ein verklemmtes Zeichen enthält.

So etwas ...

%Vor%

Irgendwelche Vorschläge für eine contains_cased () Funktion?

Oder wahrscheinlich ein anderer Implementierungsansatz?

Danke!

    
Albert 18.08.2010, 02:18
quelle

3 Antworten

6

Hier finden Sie die vollständigen Unicode-Charakterkategorien.

Buchstabenkategorien umfassen:

%Vor%

Beachten Sie, dass Ll <-> islower() ; ähnlich für Lu ; (Lu or Lt) <-> istitle()

Vielleicht möchten Sie die komplizierte Diskussion über das Gehäuse lesen, die eine Diskussion von Lm Buchstaben enthält.

Die Blindverarbeitung für alle "Buchstaben" ist falsch. Die Kategorie Lo enthält 45301 Codepunkte im BMP (gezählt mit Python 2.6). Ein großer Teil davon wären Hangul-Silben, CJK-Ideographen und andere ostasiatische Charaktere - sehr schwer zu verstehen, wie sie als "verkappt" betrachtet werden können.

Vielleicht möchten Sie eine alternative Definition basierend auf dem (nicht spezifizierten) Verhalten von "casked characters", das Sie erwarten, in Erwägung ziehen. Hier ist ein einfacher erster Versuch:

%Vor%

Interessanterweise gibt es 1216 x Ll und 937 x Lu, insgesamt 2153 ... Spielraum für weitere Untersuchungen darüber, was Ll und Lu wirklich meinen.

    
John Machin 18.08.2010, 08:08
quelle
7
%Vor%     
Alex Martelli 18.08.2010 02:25
quelle
1

Verwenden Sie das Modul unicodedata ,

%Vor%

gibt " Ll " für Kleinbuchstaben und " Lu " für Großbuchstaben zurück.

hier können Sie eine Liste von Unicode-Charakterkategorien finden

    
mykhal 18.08.2010 02:27
quelle