[Python-de] Regulaere Ausdruecke in Python

Gerhard Häring haering_python at gmx.de
Thu Oct 4 17:37:20 EDT 2001


On Thu, Oct 04, 2001 at 02:44:23PM +0200, Albert Hermeling wrote:
> Hallo,
> 
> ich habe in Python 2.1 ein Problem mit Regulären Ausdrücken.

Ich bin da leider auch << 100% kompetent. Ich kann dir aber das
Python-RegEx HOWTO unter http://py-howto.sf.net/ ans Herz legen. Das
konsultiere ich, wenn ich wieder mal alles zu RegEx vergessen habe.

> Ich muss ein String nach ". ! ?" durchsuchen. Für diese Aufgabe
> verwende ich das Modul sre mit der Funktion match.

Soweit ich weiss ist re besser, da portabler. So es sre gibt, ist ist re
nur ein dünner Wrapper für sre.

> Beispiel:
> 
> lieste=['Wie bitte?', 'Ein Satz.', 'Ein Schrei!', 'Noch ein Schrei!!', 'Kein 
> Punkt', '?','Das sind Zahlen 1 4 5 7."]

Mir ist nicht ganz klar, was du machen willst ...

> 
> Probiert habe ich es mit allerlei Versionen der Form hier:
> 
> for i in lieste:
> 	var=sre.match("A-Z a-z 0-9 [.|?|!]",i)
> 	print var
> 
> Resultat war bei allen Variationen "None" bei allen Indexwerten.

Dein RegEx heisst:
- Ein Zeichen von A-Z, gefolgt von
- einem Leerzeichen, gefolgt von
- einem Zeichen von a-z, gefolgt von
- einem Leerzeichen, gefolgt von
- einem Zeichen von 0-9, gefolgt von
- einem Leerzeichen, gefolgt von
- der letzte regex [.|?|!] ist m. E. falsch, du solltest die
  Sonderzeichen ., ?, ! escapen

Vielleicht kommt das in die Richtung, in die du willst:

>>> print re.match("([A-Za-z0-9\ ]*)([\.\!\?\(]*)", "Text bla 4711!?").groups()
('Text bla 4711', '!?')

Das filtert eine beliebige Folge von Buchstaben, Zahlen und Leerzeichen
in die erste Gruppe, und eine Beliebige Folge von Punkten,
Ausrufezeichen und Fragezeichen in eine zweite Gruppe.
  
Gerhard
-- 
mail:   gerhard <at> bigfoot <dot> de       registered Linux user #64239
web:    http://www.cs.fhm.edu/~ifw00065/    OpenPGP public key id 86AB43C0
public key fingerprint: DEC1 1D02 5743 1159 CD20  A4B6 7B22 6575 86AB 43C0
reduce(lambda x,y:x+y,map(lambda x:chr(ord(x)^42),tuple('zS^BED\nX_FOY\x0b')))



More information about the Python-de mailing list