pyparsing

23/01/2009 - 23:05 von Andreas Bruhn | Report spam
Hi allerseits,

sind irgendwelche pyparsing-Experten anwesend?

= das Programm =
#!/usr/bin/env python
# -*- coding: iso-8859-15 -*-
from string import punctuation as punc
from pyparsing import *

DEZP = Literal('.')
_edipunc = " ".join( [ c for c in punc if c not in ":+.?'" ] )
edi_an = alphanums + _edipunc
an = Word(edi_an)
num = Word(nums) + Optional(DEZP + Word(nums))
a = OneOrMore(num | an )

if __name__ == '__main__':
try:
print num.parseString('123'), ">> Erwartet: ['123']"
print num.parseString('123.46'), ">> Erwartet: ['123.46']"
print num.parseString('3.1415'), ">> Erwartet: ['3.1415']"
print a.parseString('asb'), ">> Erwartet: ['asb']"
print a.parseString('asb rztz'), ">> Erwartet: ['asb rztz']"
print a.parseString('3.1415'), ">> Erwartet: ['3.1415']"
print a.parseString('asb3.1415'), ">> Erwartet: ['asb3.1415']"
except ParseException, exc:
print 'Fehler bei:', exc.line
print 'line:', exc.lineno, ', col:', exc.col
print 'Fehlermeldung:', exc.msg

=
liefert folgende Ausgabe:











['123'] >> Erwartet: ['123']
['123', '.', '46'] >> Erwartet: ['123.46']
['3', '.', '1415'] >> Erwartet: ['3.1415']
['asb'] >> Erwartet: ['asb']
['asb rztz'] >> Erwartet: ['asb rztz']
['3', '.', '1415'] >> Erwartet: ['3.1415']
['asb3'] >> Erwartet: ['asb3.1415']











und die Frage ist: Warum? Warum kommt nicht das von mir erwartete
Ergebnis raus? Irgendwie fehlt mir etwas Entscheidendes beim
pyparsing-Verstàndnis.

Grüße,
Andreas
 

Lesen sie die antworten

#1 RaiMan
24/01/2009 - 10:21 | Warnen spam
On 23 Jan., 23:05, Andreas Bruhn
wrote:
Hi allerseits,

sind irgendwelche pyparsing-Experten anwesend?

= das Programm =>
#!/usr/bin/env python
# -*- coding: iso-8859-15 -*-
from string import punctuation as punc
from pyparsing import *

DEZP = Literal('.')
_edipunc = " ".join( [ c for c in punc if c not in ":+.?'" ] )
edi_an = alphanums + _edipunc
an = Word(edi_an)
num = Word(nums) + Optional(DEZP + Word(nums))
a = OneOrMore(num | an )

if __name__ == '__main__':
 try:
   print num.parseString('123'), ">> Erwartet: ['123']"
   print num.parseString('123.46'), ">> Erwartet: ['123.46']"
   print num.parseString('3.1415'), ">> Erwartet: ['3.1415']"
   print a.parseString('asb'), ">> Erwartet: ['asb']"
   print a.parseString('asb rztz'), ">> Erwartet: ['asb rztz']"
   print a.parseString('3.1415'), ">> Erwartet: ['3.1415']"
   print a.parseString('asb3.1415'), ">> Erwartet: ['asb3.1415']"
 except ParseException, exc:
   print 'Fehler bei:', exc.line
   print 'line:', exc.lineno, ', col:', exc.col
   print 'Fehlermeldung:', exc.msg

=>
liefert folgende Ausgabe:



['123'] >> Erwartet: ['123']
['123', '.', '46'] >> Erwartet: ['123.46']
['3', '.', '1415'] >> Erwartet: ['3.1415']
['asb'] >> Erwartet: ['asb']
['asb rztz'] >> Erwartet: ['asb rztz']
['3', '.', '1415'] >> Erwartet: ['3.1415']
['asb3'] >> Erwartet: ['asb3.1415']



und die Frage ist: Warum? Warum kommt nicht das von mir erwartete
Ergebnis raus? Irgendwie fehlt mir etwas Entscheidendes beim
pyparsing-Verstàndnis.

Grüße,
        Andreas



Hallo Andreas,

was Du suchst, ist 'Combine':

num = Combine(Word(nums) + Optional(DEZP + Word(nums)))

Dein letzter Test-String 'asb3.1415' ist kein 'num', weil er nicht mit
einer Ziffer beginnt. Also wird er als 'an' geparst und dabei ist bei
dem Punkt Schluss, da Du den bei der Definition von '_edipunc'
ausgeschlossen hast.

Grüsse

Rainer

Ähnliche fragen