Clojure Parse String

时间:2009-09-19 00:00:45

标签: regex clojure

我有以下字符串

layout: default
title: Envy Labs

我要做的是从中创建地图

layout->default 
title->"envy labs"

这可以使用序列函数吗?还是我必须遍历每一行?

尝试使用正则表达式并使用失败。


(apply hash-map (re-split #": " meta-info))

3 个答案:

答案 0 :(得分:4)

user> (let [x "layout: default\ntitle: Envy Labs"]
        (reduce (fn [h [_ k v]] (assoc h k v))
                {}
                (re-seq #"([^:]+): (.+)(\n|$)" x)))
{"title" "Envy Labs", "layout" "default"}

答案 1 :(得分:3)

_是一个变量名,用于表示您不关心变量的值(在这种情况下,是整个匹配的字符串)。

答案 2 :(得分:1)

我建议使用clojure-contrib/duck-streams/read-lines来处理这些行,然后从那里拆分字段。我发现这种方法通常对文件中的错误更加健壮。