Невероятные серии цифр или букв как один лист?
Так что я возился с instaparse, и это было здорово, однако я старался избегать использования регулярных выражений в качестве опоры, и это привело к более многословному. Ради сохранения читабельности давайте просто скажем #'[A-z]'
на самом деле в 'A'|'B'|etc
формат.
(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"]
Есть ли способ, не прибегая к #'[A-z]+'
а также #'[0-9]+
чтобы получить листья как [:word "foo123"]
или же [:number "123"]
(если бы я создал правило для нескольких уровней), чтобы избежать необходимости объединять их как часть обработки после анализа?
1 ответ
В настоящее время нет способа (кроме регулярных выражений) автоматически объединять эти строки во время анализа. Я бы порекомендовал сделать это объединение в insta/transform
карта.
Также нет ничего плохого в использовании регулярных выражений в таком простом случае. Мы знаем, что нет возможного анализа, который мы пропускаем, жадно разбирая все буквы или все числа. Поэтому регулярные выражения приемлемы (и более производительны).