代码之家  ›  专栏  ›  技术社区  ›  Ilan

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

  •  0
  • Ilan  · 技术社区  · 6 年前

    我需要使用Clojure删除字符串(eq_代码)末尾的一些内容。 我想实现一个由变量初始化的正则表达式 (进入向量[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 回复  |  直到 6 年前
        1
  •  3
  •   leetwinski    6 年前

    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 是核心函数,所以尽量不要将其用作变量名来隐藏它(尽管这并不是解决方案的实际问题)

        2
  •  0
  •   Alan Thompson    6 年前

    我认为问题在于 vector 这导致了编译器的混乱。

    你能用样本数据和期望的输出更新你的问题吗?