Instaparse 一系列数字或字母作为一片叶子?
Instaparse series of numbers or letters as one leaf?
所以我一直在使用 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"]
(如果我制定了一个数字顶层规则)为了避免必须将它们连接起来作为 post 解析处理的一部分?
目前没有办法(除了正则表达式)在解析过程中自动合并这些字符串。我建议在 insta/transform
映射中进行这种连接。
在这种简单的情况下使用正则表达式也没有错。我们知道,通过贪婪地解析所有字母或所有数字,我们不会错过任何可能的解析。因此正则表达式是可以接受的(并且性能更高)。
所以我一直在使用 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"]
(如果我制定了一个数字顶层规则)为了避免必须将它们连接起来作为 post 解析处理的一部分?
目前没有办法(除了正则表达式)在解析过程中自动合并这些字符串。我建议在 insta/transform
映射中进行这种连接。
在这种简单的情况下使用正则表达式也没有错。我们知道,通过贪婪地解析所有字母或所有数字,我们不会错过任何可能的解析。因此正则表达式是可以接受的(并且性能更高)。