Clojure Parse String - PullRequest
       8

Clojure Parse String

4 голосов
/ 19 сентября 2009

У меня есть следующая строка

layout: default
title: Envy Labs

Что я пытаюсь сделать, это создать карту из нее

layout->default 
title->"envy labs"

Можно ли это сделать с помощью функций последовательности или мне нужно перебирать каждую строку?

Попытка заставить работать регулярное выражение и отказ от использования.


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

Ответы [ 3 ]

4 голосов
/ 19 сентября 2009
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"}
3 голосов
/ 19 сентября 2009

_ - это имя переменной, используемой для обозначения того, что вам не важно значение переменной (в данном случае, всей совпадающей строки).

1 голос
/ 19 сентября 2009

Я бы рекомендовал использовать clojure-contrib / duck-streams / read-lines для обработки строк, а затем разделить поля оттуда. Я считаю, что этот метод обычно более устойчив к ошибкам в файле.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...