clojure - 用包含没有宏的变量的正则表达式替换字符串
问题描述
我需要使用 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)
有没有办法在不使用宏的情况下替换子字符串?例如使用返回正则表达式的函数。
解决方案
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 名称来隐藏它(尽管这实际上并不是您的解决方案有什么问题)
推荐阅读
- c++ - 一维动态数组,括号
- javascript - 如何在Javascript中将两位数字符串转换为int?
- python - 为什么命令 python manage.py runserver 不起作用?
- snmp - 是否有用于通过 SNMP 进行通信的设备的通用对象标识符?
- angular - 数据表 - 翻译响应元素
- android - 应用程序在后台时接收通知的问题
- angular - 如何在自定义控件Angular中设置活动元素?
- microcontroller - Atmel SAMD21 DMAC 写回失败?
- html - 字符串离开屏幕
- firebase - Firebase Blaze 计划和云功能