Wie kann ich kyrillische Zeichenbereiche in einem Python 3.2 Regex angeben?

8

Einmal fand ich Diese Frage ist interessant.

Heute habe ich beschlossen, mit dem Text dieses Buches herumzuspielen.

Ich möchte den regulären Ausdruck in diesem Skript verwenden. Wenn ich das Skript für kyrillischen Text verwende, löscht es alle kyrillischen Zeichen und lässt nur Satzzeichen und Leerzeichen zurück.

%Vor%

Etwas sehr Ähnliches wurde bereits in dieser Antwort gemacht.

Grundsätzlich möchte ich nur eine Reihe von Zeichen angeben können, die nicht alphabetisch, alphanumerisch oder Satzzeichen oder Leerzeichen sind.

    
magnetar 11.06.2012, 13:40
quelle

3 Antworten

7

Dies beantwortet nicht genau Ihre Frage, aber das Modul regex hat viel viel bessere Unicode-Unterstützung als das eingebaute re -Modul. z.B. regex unterstützt die Eigenschaft \p{Cyrillic} und ihre Negation \P{Cyrillic} (sowie eine große Anzahl von andere Unicode-Eigenschaften ). Außerdem behandelt Unicode Groß- und Kleinschreibung korrekt.

    
huon 11.06.2012, 14:07
quelle
9

Sie können den Unicode-Bereich ziemlich einfach angeben: \u0400-\u0500 . Siehe auch hier .

Hier ist ein Beispiel mit einem Text aus der russischen Wikipedia und einem Satz aus der englischen Wikipedia, der ein einzelnes Wort in kyrillischer Schrift enthält.

%Vor%

Ausgabe:

%Vor%

Zusatz:

Zwei andere Wege, die auch funktionieren sollten, und zwar etwas weniger hackisch als die Angabe eines Unicode-Bereichs:

  • re.findall("(?u)\w+", text) sollte sowohl kyrillische als auch lateinische Zeichen enthalten.
  • re.findall("\w+", text, re.UNICODE) ist äquivalent

Also, genauer gesagt für Ihr Problem: * re.compile('[^\s\w.,?!:;-], re.UNICODE') sollte den Trick machen.

Siehe hier (Punkt 7)

    
Junuxx 11.06.2012 14:41
quelle
-1

Aus praktischen Gründen schlage ich vor, die exakte moderne russische Untergruppe von Glyphen anstelle von allgemein kyrillisch zu verwenden. Dies liegt daran, dass russische Websites niemals die vollständige kyrillische Untergruppe verwenden, die belarussische, ukrainische, slawische und mazedonische Glyphen enthält. Aus historischen Gründen halte ich "u \ 0463".

// Basic Cyr Unicode-Bereich für die Verwendung auf russischen Websites. 0401,0406,0410,0411,0412,0413,0414,0415,0416,0417,0418,0419,041A, 041B, 041C, 041D, 041E, 041F, 0420,0421,0422,0423,0424,0425,0426, 0427,0428,0429,042A, 042B, 042C, 042D, 042E, 042F, 0430,0431,0432,0433,0434,0435,0436,0437,0438,0439,043A, 043B, 043C, 043D, 043E, 043F, 0440,0441,0442,0443,0444,0445,0446,0447,0448,0449,044A, 044B, 044C, 044D, 044E, 044F, 0451,0462,0463

Wenn Sie diese Teilmenge auf einer mehrsprachigen Website verwenden, sparen Sie 60% der Bandbreite im Vergleich zur Verwendung des gesamten Originalbereichs und erhöhen die Ladegeschwindigkeit entsprechend.

    
ommunist 15.11.2014 12:21
quelle

Tags und Links