用包含不带宏的变量的正则表达式替换字符串

时间:2018-12-28 16:45:19

标签: clojure

我需要使用Clojure删除字符串(eq_code)末尾的某些内容。 我想实现由变量(获取向量[3 1])初始化的正则表达式。

也许宏会对我有帮助。

这是代码:

(reset! atom_code (clojure.string/replace eq_code #(str (get-in vector [3 1])) ""))

错误是:

IllegalArgumentException Invalid match arg: project.core$interpreted_lang_while$fn__4457@7ac4b7c5  clojure.string/replace (string.clj:102)

有没有一种方法可以在不使用宏的情况下替换子字符串? 例如,使用返回正则表达式的函数。

2 个答案:

答案 0 :(得分:3)

https://clojuredocs.org/clojure.string/replace

replace匹配参数(第二个arg)不能是一个函数。 解决方案是根据动态值构造模式:

user> (def data [["a" "b"] ["c" "d"]])
#'user/data

user> (clojure.string/replace "mama" (re-pattern (get-in data [0 0])) "")
"mm"

还有:vector是核心功能,因此请尽量不要将其用作var名称(尽管实际上这并不是解决方案的问题)

答案 1 :(得分:0)

我认为问题在于vector是clojure函数,并且我猜测您有一些名为vector的数据导致了编译器的混乱。

能否请您使用示例数据和所需的输出来更新您的问题?

相关问题