2016-04-19 15 views
2

Also habe ich mit Instabilität herumgespielt und es war großartig, aber ich habe versucht zu vermeiden, Regexes als Krücke zu verwenden, und es hat etwas mehr wortreich ergeben. Um dies lesbar zu halten, sagen wir einfach #'[A-z]' ist eigentlich in der 'A'|'B'|etc Format.Installe Reihe von Zahlen oder Buchstaben als ein Blatt?

(def myprsr (instaparse.core/parser 
    "word = (ltr | num)+; 
    <ltr> = #'[A-z]'; 
    <num> = '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9';")) 
(myprs"foo123") ;; -> [:word "f" "o" "o" "1" "2" "3"] 

Gibt es eine Möglichkeit zu #'[A-z]+' und #'[0-9]+ ohne Rückgriff wie [:word "foo123"] oder [:number "123"] zu bekommen auslässt, um (wenn ich eine Reihe Toplevel Regel gemacht hatte), um zu vermeiden, sich als Teil der Post Parse-Verarbeitung verketten ?

Antwort

2

Es gibt derzeit (außer Regex) keine Möglichkeit, diese Strings während des Parsens automatisch zusammenzuführen. Ich würde empfehlen, diese Verkettung in der insta/transform Karte zu machen.

Es ist auch nichts falsch mit der Verwendung von Regexes in einem Fall so einfach. Wir wissen, dass es kein mögliches Parsen gibt, das wir verpassen, wenn wir gierig alle Buchstaben oder alle Zahlen analysieren. Daher sind Regexes akzeptabel (und leistungsfähiger).