Seite 1 von 1

Regular expressions und umlaute

Verfasst: Montag 12. März 2007, 14:04
von Francesco
Hallo Forum,

ich möchte einen Text zerlegen und alle Wörter herausbekommen, die mit einem beginnstring beginnen. mit normalen Zeichen geht das ja, nur
mit den Umlauten happerts.

Hier sollten alles Wörter beginnend mit 'ä' in eine Liste kommen:

Code: Alles auswählen

text= "jdjsafä äöoiiii ääoool uzu opäll"
findandcompleteregex1 = re.compile(r"\b" + 'ä' + r"\S*", re.MULTILINE|re.IGNORECASE)
r=findandcompleteregex1.findall(text)
r
['\xe4', '\xe4ll']
Leider werden anscheinend die Wörter zerlegt.

Wer kann mir einen regexstring (wenn nicht möglich) etwas längeres
vorschlagen, das mir einwandfrei und zuverlässig teilt?

Danke,

Verfasst: Montag 12. März 2007, 14:34
von BlackJack
'\b' erkennt die leere Zeichenkette zwischen einem "Wortzeichen" und einem "Nicht-Wortzeichen". Da '\xe4' nicht zu den "Wortzeichen" zählt, gibt es nur zwei Stellen in `text` wo die "Lücke" von einem '\xe4' gefolgt wird. Habe ich übrigens absichtlich so geschrieben, weil es sich um ein Byte mit dem Wert 0x4e handelt was bei Dir zufällig als 'ä' dargestellt wird.

Alternative zu `re`:

Code: Alles auswählen

In [56]: text = 'jdjsafä äöoiiii ääoool uzu opäll'

In [57]: filter(lambda w: w.startswith('ä'), text.split())
Out[57]: ['\xc3\xa4\xc3\xb6oiiii', '\xc3\xa4\xc3\xa4oool']

Verfasst: Montag 12. März 2007, 15:01
von gerold
Hallo Francesco!

Hier noch die Variante mit RE:

Code: Alles auswählen

>>> import re
>>> re.UNICODE
32
>>> text= u"jdjsafä äöoiiii ääoool uzu opäll"
>>> r = re.compile(ur"\b" + u'ä' + ur"\S*", re.MULTILINE|re.IGNORECASE | re.UNICODE)
>>> r.findall(text)
[u'\xe4\xf6oiiii', u'\xe4\xe4oool']
>>> 
lg
Gerold
:-)

Verfasst: Montag 12. März 2007, 16:53
von Francesco
gerold hat geschrieben:Hallo Francesco!

Hier noch die Variante mit RE:

Code: Alles auswählen

>>> import re
>>> re.UNICODE
32
>>> text= u"jdjsafä äöoiiii ääoool uzu opäll"
>>> r = re.compile(ur"\b" + u'ä' + ur"\S*", re.MULTILINE|re.IGNORECASE | re.UNICODE)
>>> r.findall(text)
[u'\xe4\xf6oiiii', u'\xe4\xe4oool']
>>> 
lg
Gerold
:-)
Hallo ich danke euch beiden, ich nehme gerolds lösung!