【发布时间】:2015-02-01 18:28:21
【问题描述】:
(def grammar
"
<root> = line*
<line> = START REST
<START> = #'[0-9]{4} '
<REST> = NA | NZ | DATETIME
<NA> = 'Nicht angemeldet '
<NZ> = 'Nicht zugelassen '
<DATETIME> = TAG ZEIT
<TAG> = 'Montag ' | 'Dienstag '
<ZEIT> = #'[0-9]{1}.*Uhr '
")
(defn changed-x [tree]
(postwalk
(fn [node]
(if (and (vector? node) (= (first node) :line))
[:line (-> node rest 10)]
node))
tree))
(defn -main
[& args]
;; Create the tree and save it to "tree" with a function (not included here)
but it works
(def tree (test-title-parser title-grammar-1 In))
;; Change the tree so every line just becomes "10" hardcoded in the changed-x function
(changed-x tree)
;; print the tree
(println tree)
)
这是一个(小)要解析的测试字符串: 1017 Montag 13-14:30Uhr 1026 Nicht zugelassen
i want this to happen:
1017 Montag 13-14:30 Uhr
1026 Nicht zugelassen
每行末尾只需一个小 CR-Enter,或打印到控制台,以便我可以将输出重定向到文件。 我希望在数字和文本之间有标签。所以我可以将结果粘贴到 Excel 中,每行有 2 个单独的字段。
my tree Looks like this
(1017 Montag 13-14:30Uhr 1026 Nicht zugelassen .................. )
我把所有我不需要的东西都放了。
现在请为我解决这个该死的难题的最后一点(乞求),因为我花了几个小时来理解 instaparse 及其工作方式,只是为了发现它确实正确分离了我的字符串,但让我更接近 0%我真的很想。每周至少要取得某种成功。 srsly...我可以在几分钟内用 4 种不同的语言做到这一点,我需要的是一个该死的 for 循环和一个带有字符串的变量。
我试图了解您的功能: 这要怎么读?节点到底是什么?我放在语法左侧的所有内容? -> 在这里做什么?从未见过它以这种方式使用,为什么我们有 []-Brackets?最后一个节点是做什么的?
(if (and (vector? node) (= (first node) :line))
[:line (-> node rest 10)]
node))
【问题讨论】:
标签: parsing clojure tree nodes