在替换调用中获取正则表达式组的值

时间:2015-04-08 06:58:25

标签: regex replace clojure

我有一个向量s和字符串x

(def s [5 6 7])
(def x "echo %1 %2 %3")

我想将%n中的x转换为值s[n-1]以生成:

echo 5 6 7

我该怎么做?我到目前为止最远的是:

(clojure.string/replace code #"%(\d)" (s "$1"-1))

但这显然不起作用。

1 个答案:

答案 0 :(得分:2)

clojure.string/replace函数的替换参数可以是字符串,也可以是匹配模式并返回字符串的函数。在这种情况下,它应该是一个函数如下。

user> (def s [5 6 7])
#'user/s

user> (def x "echo %1 %2 %3")
#'user/x

user> (defn replacement [match] (-> match second Long/parseLong dec s str))
#'user/replacement

user> (clojure.string/replace x #"%(\d)" replacement)
"echo 5 6 7"

replacement函数采用两个字符串的向量,因为每个匹配都是一个字符串向量。

user> (re-seq #"%(\d)" "echo %1 %2 %3")
(["%1" "1"] ["%2" "2"] ["%3" "3"])