2016-05-13 26 views
2

Im deutschen Text, Umlaute (ä, ö, ü) und Eszett (ß) sind regelmäßig Briefe, aber sie scheinen nicht von den \w Sonderzeichen gedeckt werden:Wie werden Umlaute mit regulären Ausdrücken verglichen?

In [1]: re.match('(\w+)', 'Straße').groups() 
Out[1]: ('Stra',) 

Vorbei an die re.UNICODE Flagge re.match ändert nichts.

Gibt es eine bessere Möglichkeit, ein vollständiges Wort als mit [a-zA-ZäüöÄÜÖß]+ zu vergleichen?

+1

Ist es Python 2 oder 3? –

+0

@ WiktorStribiżew 2 – elpres

+4

Ich kann nicht repro: siehe ['re.match (ur '(\ w +)', uStraße ', flags = re.U) .group (1) .encode (" utf8 ")'] (https://ideone.com/R1xTej), druckt 'Straße'. Vielleicht haben Sie einfach "u" "Präfixe verpasst? '\ w' deckt alle Unicode-Buchstaben ab, wenn Sie das' re.U'-Flag übergeben. –

Antwort

5

Da Sie mit Python 2, müssen Sie Unicode-Strings verwenden:

print re.match(ur'(\w+)',u'Straße',re.UNICODE).groups()[0] 
Straße 
+0

Sie brauchen nicht das 'u' in' u '(\ w +)' 'aber es tut nicht weh. –

+0

Sie haben recht, es funktioniert, wenn sowohl eine 'u''''-Zeichenfolge als auch die' re.UNICODE'-Flagge vorhanden sind. Vielen Dank! – elpres

+1

Ein Hinweis: Verwenden Sie Raw-String-Literale beim Definieren eines Regex-Musters. –

Verwandte Themen