regex - 如何将值作为正则表达式而不是字符串常量传递给重新匹配

标签 regex clojure

我正在尝试将一个值传递到 clojure 的重新匹配函数中,以获取像这样的正则表达式

(defn extract-val
[k data]
  (let [r (format ".*\"%s\":\"(.*?)\".*" k)
        v ((last (re-matches #(str r) data)))]
 v))

将此函数调用为 (extract-val "事件""{\"事件\":\"数据\"}")

抛出类转换异常,并显示一条消息,指出无法转换为 java.util.regex.Pattern clojure.core/re-matcher

有什么方法可以做到这一点还是我必须直接使用 regex.Pattern

最佳答案

#(str r) 创建一个包含 0 个参数的匿名函数,在调用时对 str r 进行计算。您可以使用re-pattern创建模式:

(last (re-matches (re-pattern r) data)

如果您正在处理 JSON,则应该使用解析器而不是正则表达式。

关于regex - 如何将值作为正则表达式而不是字符串常量传递给重新匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26369310/

相关文章:

emacs - Emacs/Swank/Paredit for Clojure 的温和教程

clojure - 将选项传递给 quil 和 clojure 中的 draw 函数声明。

javascript - Clojurescript:具有基数值的 parseInt-Function

c# - 如何使用 C# 从给定的 HTML 字符串中获取 IMG 标签的源代码

java - 获取固定长度的子串匹配模式

java - 按excel条件分割

Clojure 如何查找和管理依赖关系冲突。

csv - 使用 clojure-csv.core 解析一个巨大的 csv 文件

java - 密码的正则表达式

python - 如何反转正则表达式替换?