如何从字符串 Clojure 中删除反斜杠 \

How to remove a backslash \ from string Clojure

我已经尝试了几种方法,但仍然无法正常工作。

 (clojure.string/replace "[\"fish\"]" "\" "")

我希望它是“["fish"]”

我也试过.replaceAll

问题是我不知道如何将\传入参数。我看过这里建议的答案:

Replacing * with \* in Clojure

这是指添加 \ 而不是删除,但这对我不起作用

"[\"fish\"]" "["fish"]"

引号是escaped。如果您的字符串字面上是“[\"fish\"]”,它看起来像 "[\\"fish\\"]".

那样的话

> (clojure.string/replace "[\\"fish\\"]" #"\" "")
"[\"fish\"]"

无用的简短回答是您无法删除它们,因为它们不在那里可以删除。

让我们逐步计算上面的表达式:

  1. 首先它将字符串(clojure.string/replace "[\"fish\"]" "\" "")读取为一堆字符并将其解析为列表。看起来像 (function-name string1 string2 string3)

    • string1 = ["fish"](请注意,reader 没有使用它们)
    • string2 = "\"(同样没有多余的 \'s)
    • string3 = ""
  2. 然后它通过调用函数来计算该表达式,因为输入不包含 \s 它只是 returns 它不变。

  3. 然后它以适合读回的格式打印结果。为了使这段代码可以安全阅读,它必须 通过添加 \s 来转义 "s它将它们写入屏幕。

如果我们打印人类消费而不是计算机消费的输出,我们可以在 repl 看到这一点:

user> "[\"fish\"]"
"[\"fish\"]"
 user> (println "[\"fish\"]")
["fish"]

user> (println (clojure.string/replace "[\"fish\"]" "\" ""))
["fish"]

我不明白你到底想要什么结果,但如果你试图解析给定的字符串并期望你的输出是一个向量,那么你可以使用 clojure 的 Cheshire 来解析字符串像这样:

(vec (cheshire.core/parse-string "[\"fish\"]" )))
;; ["fish"]

如果你想要一个简单的字符串结果那么你可以使用上面的 answers/solutions.