Господа, а какой парсер для текста вы посоветуете?
Мне не языки программирования, а строчки типа 24X7 TR PO ISSUE 5675676 ECABS OPERATORS COMPANY LIMITED EUR44.00 IVAN IVANOV COMMISSION: EUR 1.00 REF : 666-31/12/2000-6666-77-4
парсить.
И этих строчек 50 вариантов.
В #clojure подсказали instaparse
и особенно instaparse.combinators
https://github.com/blancas/kern очень простой и работает
из парсер комбинаторов
правда чувак все никак поддержку cljs не смержит https://github.com/blancas/kern/pull/14
@prepor Спасибо, попробую.
Что-то с instaparse
не удалось с наскока сделать парсер "если в конце строки есть REF : \d\d\d-\d\d/\d\d/\d\d\d\d-\d\d\d\d-\d\d-\d
, то один вариант, а если нет, то другой".
Потому что перед этим REF ...
текст в произвольной форме может быть, и всякие варианты .*
сжирают и конец строки тоже.
((insta/parser
"line = refline | other
refline = whatever ref nums
whatever = #'.*(?=REF:)'
<ref> = <'REF:'>
nums = #'\\d\\d\\d-\\d\\d/\\d\\d/\\d\\d\\d\\d-\\d\\d\\d\\d-\\d\\d-\\d'
other = 'hello'" ) "555REF:123-12/12/1234-1234-12-1")
=> [:line [:refline [:whatever "555"] [:nums "123-12/12/1234-1234-12-1"]]]
https://www.programcreek.com/2010/12/regular-expression-exclude-a-wordstring/ так вроде норм
А, негативный lookahead забабахать? Это вариант.
@ilevd Спасибо.
Точнее, это позитивный. Но можно и негативный.