Seite 1 von 1

Pyparsing: Ausdruck in Strings beliebiger Länge

Verfasst: Freitag 4. Januar 2013, 14:26
von zwfzwf
Hallo... ich bin dabei einen boost::spirit Ausdruck unter Python zu implementieren und Versuche eine eigentlich sehr simple Grammatik mittels pyparsing zu formulieren... das klappt aber nicht: er parst den ersten Ausdruck (logisch, strings beliebiger Länge) bis zu Ende und kommt dann nicht weiter. Er geht nicht alle Pfade durch, ob er einen Match erhält.

Code: Alles auswählen

ident = MatchFirst( Group( CaselessLiteral( 's' ) + Word( nums, exact=2 ) + CaselessLiteral('e') + Word( nums, exact=2 ) ) )
grammar = OneOrMore( Word( printables ) ) + ident + OneOrMore( Word( printables ) )
Prinzipiell soll nur ein Identifier im String gesucht wird, der in der ersten Zeile beschrieben ist: z.B. s00e00

Alles davor möchte ich als einen Ausdruck bekommen, und alles danach auch. Die Frage ist: wie mache ich das? Hat jemand eine Idee wo das Problem ist?

Re: Pyparsing: Ausdruck in Strings beliebiger Länge

Verfasst: Freitag 4. Januar 2013, 14:38
von lunar
@zwfzwf Reichen dafür nicht ganz gewöhnliche reguläre Ausdrücke?! Sprich etwas in der Art "re.search(r'(?P<before>.*)(?P<ident>s\d{2}e\d{2})(?P<after>.*)', s, re.UNICODE)"…

Re: Pyparsing: Ausdruck in Strings beliebiger Länge

Verfasst: Freitag 4. Januar 2013, 15:43
von zwfzwf
Prinzipiell mit Sicherheit... aber beim RegEx Tags betrachten knallt mir immer die Birne durch. :oops:

Das werde ich mal versuchen auszuprobieren... danke!

Re: Pyparsing: Ausdruck in Strings beliebiger Länge

Verfasst: Samstag 5. Januar 2013, 17:51
von zwfzwf
Das hat super funktioniert... vielen Dank! :)

Ich tue mich gerade noch schwer herauszufinden, wie ich den Term ausdrücke daß hier (?P<ident>s\d{2}e\d{2}) das "s" und das "e" sowohl groß alsauch klein geschrieben werden können.

EDIT: Hab es doch hingekriegt [sS] [eE]! Funktioniert sehr gut.

Re: Pyparsing: Ausdruck in Strings beliebiger Länge

Verfasst: Samstag 5. Januar 2013, 18:16
von lunar
@zwfzwf "re.IGNORECASE" hätte es auch getan :)

Re: Pyparsing: Ausdruck in Strings beliebiger Länge

Verfasst: Samstag 5. Januar 2013, 19:33
von Sirius3
Für diesen einfachen Fall reicht auch ein

Code: Alles auswählen

pattern = re.compile(r'(s\d{2}e\d{2})',re.I)
anfang, mitte, ende = pattern.split(text,1)