2016-07-24 12 views
2

ich diese hervorragende Anleitung gefunden zu haben: http://www.regular-expressions.info/unicode.html#category, die einige Hinweise auf gibt, wie mit der folgenden regex nicht Buchstaben entsprechen:Regex alle nicht Buchstaben ohne diakritische Zeichen (Python)

\P{L} 

Aber diese regex wird prüfen nicht Buchstaben auch à codiert als U + 0061 U + 0300 (wenn ich gut verstanden habe). Zum Beispiel regex Modul in Python den folgenden Ausschnitt mit:

all_letter_doc = regex.sub(r'\P{L}', ' ', doc) 

purè in pur

In der Führung verwandeln vorgesehen, wie alle Buchstaben mit folgendem übereinstimmen:

\p{L}\p{M}*+ 

und In der Praxis brauche ich die Negation, aber ich weiß nicht, wie ich es bekommen kann.

+0

Try 'ur '\ P {L}'' und ersetzen mit 'u‘ ‚'. Im Fall, dass Sie alle Zeichen außer Buchstaben und diakritische Zeichen mit Leerzeichen ersetzen, müssen Sie '[^ \ p {L} \ p {M}] +' regex –

+0

ausgezeichnet, nur in der Antwort erklären, warum es funktioniert, und ich werde akzeptieren. Vielen Dank! – Sanandrea

+0

Verwenden Sie Python 2.x? –

Antwort

4

Da Sie Python 2.x verwenden, Ihre r'\P{L}' ist ein Byte-String, während der Eingang Sie Unicode ist. Sie müssen Ihr Muster zu einer Unicode-Zeichenfolge machen. Siehe PyPi regex reference:

Wenn weder der ASCII, LOCALE noch UNICODE Flag angegeben ist, wird es zu UNICODE Standard, wenn das RegexMuster ein Unicode-String ist und ASCII wenn es ein bytestring ist.

So müssen Sie ur'\P{L}' und ein u' ' Ersetzungsmuster verwenden.

Wenn Sie 1+ Zeichen außer Buchstaben und diakritischen Zeichen zuordnen möchten, benötigen Sie Regex.

Verwandte Themen