2012-11-07 5 views
7

Ich brauche die Lösungen zu this question, außer für Python! Ich habe versucht, die Regex-Bibliothek für Python, as apparently, die die Verwendung von POSIX-Ausdrücke in Python Regexes ermöglicht, aber dennoch denke ich, es enthält keine Unicode-Zeichen in der Klasse [:alpha:]. ZB:Wie können Zeichen mit Akzenten in Python mit einem Regex verglichen werden?

>>> re.search(r'[[:alpha:] ]+','Please work blåbær and NOW stop 123').group(0) 
'Please work bl' 

Wenn ich es will Please work blåbær and NOW stop

EDIT zum Spiel: ich Python bin mit 2,7

EDIT 2: habe ich versucht, die folgenden:

>>> re.search(re.compile('[\w ]+', re.UNICODE),'Please work blåbær and NOW stop 123').group(0) 
'Please work bl\xc3' 

Nicht ganz, was ich wollte (Ich möchte den Teil nach dem ersten Nicht-ASCII-Zeichen auch anpassen), b Zumindest stimmte es mehr auf Charakter ab als vorher. Was sollte ich hier tun, um es mit dem Rest von dem, was ich will, in Einklang zu bringen?

EDIT 3: Ich möchte keine Nicht-Wort-Zeichen zusammenbringen; Mit "Wort" meine ich a-z, A-Z, Raum und alle akzentuierten Variationen von Wortzeichen. Ich hoffe, ich habe meine Idee verstanden; in einem Satz wie

lets match força, but stop before that comma 

möchte ich 4 nur lets match força

EDIT zum Spiel: So Python Ich habe versucht, drei für diese ein Skript nur zu verwenden:

>>> re.search(re.compile('[\w ]+', re.UNICODE),'lets match força, but stop before that comma').group(0) 
'lets match força' 

Ich denke, es funktioniert zum größten Teil in Python 3, außer dass es auch Zahlen (die ich definitiv nicht will) und Unterstriche übereinstimmt. Irgendeine Möglichkeit, dies zu beheben, in Python 2 oder 3?

Antwort

2

Es ist nicht klar, welche Python-Version Sie verwenden. Wenn Sie 2.x verwenden, haben Sie vielleicht ein Unicode-Problem. Sehen Sie diese post für weitere Hinweise und fühlen Sie sich frei, Ihre Frage zu aktualisieren, um weiter zu erarbeiten.

Im ziemlich surprissed, dass ich nicht das Zeichen mit Akzent auf die richtige Unicode-Darstellung ...

aber es gibt Abhilfe umwandeln kann:

re.search(re.compile('((\w+\s)|(\w+\W+\w+\s))+', re.UNICODE), ur'Please work blåbær and NOW stop 123').group(0) 

oder

re.search(re.compile('\D+', re.UNICODE), ur'Please work blåbær and NOW stop 123').group(0) 
Verwandte Themen