2016-04-05 12 views
2

Ich habe ein einfachen Daten mit Linien analysieren gesetzt wie folgt aus:PyParsing: Ist es möglich, alle Literale global zu unterdrücken?

R1 (a/30) to R2 (b/30), metric 30 

Die einzigen Daten, die ich aus der oben muß, sind wie folgt:

R1, a, 30, R2, 192.168.0.2, 30, 30 

ich leicht alle diese analysieren kann mit pyparsing, aber ich entweder am Ende mit einer Reihe von Literalen in meiner Ausgabe, oder ich muss speziell sagen, Literal(thing).suppress() in meiner Parsing-Grammatik, die ermüdend wird.

Idealerweise würde Ich mag eine Grammatik für die oben schreiben wie:

Word(alphanums) + '(' + Word(alphanums) + '/' + Word(nums) + ... etc. 

und habe die wörtlichen Token ignoriert erhalten. Kann ich etwas wie .suppressAllLiterals() sagen?

Hinweise:

  • neu PyParsing
  • Ich habe
  • google gesucht, die Dokumentation und 5 oder 6 Beispiele lesen

Dank!

Antwort

2

können Sie diese Methode auf ParserElement verwenden - nennen Sie es sofort nach pyparsing importieren:

from pyparsing import ...whatever... 
ParserElement.inlineLiteralsUsing(Suppress) 

Nun sind alle Stringliterale in Ihrem Parser in Suppress Objekte gewickelt werden, und links die Ergebnisse aus, anstatt der Standardwert Literal.

(Ich werde wahrscheinlich dies der Standard in v3.0 machen, einen Tag, wenn ich kann die Abwärtskompatibilität brechen.)

+1

Hallo @ Paul, danke für die Antwort! Ich habe es ausprobiert - es scheint, dass es für Strings verwendet wird, die inline verwendet werden (zB 'pp.Word (...) + 'somestring' + pp.Word (...)') und nicht für Dinge, die bereits vorhanden sind wurde als pp.Literal Token versehen (zB wenn ich '‚somestring‘ersetzt' mit 'myLiteral'). Diese kleinen Änderung viel mit der Grammatik Klarheit geholfen. nochmals vielen Dank für die Zeit nehmen, sehr geschätzt. –

+0

natürlich , Sie können immer '' Suppress (myLiteral) 'oder nur' myLiteral.suppress() 'auch umbrechen. – PaulMcG

+0

Sie können auch ein unterdrücktes Literal mit' Suppress ("blah") 'erstellen, und die Suppress-Klasse erstellt das Literal für Du. – PaulMcG

Verwandte Themen