首页 > 解决方案 > 用包含没有宏的变量的正则表达式替换字符串

问题描述

我需要使用 Clojure 删除字符串(eq_code)末尾的一些内容。我想实现一个由变量(get-in vector [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)

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

标签: clojure

解决方案


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

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

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

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

还有:vector是核心功能,所以尽量不要通过将其用作 var 名称来隐藏它(尽管这实际上并不是您的解决方案有什么问题)


推荐阅读