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

时间:2015-10-28 21:15:09

标签: string clojure character backslash

我尝试了几种方法,但我仍然无法让它发挥作用。

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

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

我也尝试过.replaceAll

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

Replacing * with \* in Clojure

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

3 个答案:

答案 0 :(得分:10)

无用的简短答案是你无法删除它们,因为它们不会被删除。

让我们逐步评估上面的表达式:

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

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

  3. 然后它以适合回读的格式打印结果。为了使这段代码安全可读,它必须在写入时通过添加\ s 来转义" s他们到了银幕。
  4. 如果我们打印人类消费而不是计算机消费的输出,那么在repl我们可以看到这个:

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

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

答案 1 :(得分:2)

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

报价为escaped。如果你的字符串字面意思是" [\" fish \"]",它看起来像"[\\\"fish\\\"]"

在那种情况下

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

答案 2 :(得分:0)

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

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

- > ["鱼"]

如果您想要一个简单的字符串结果,那么您可以使用上述答案/解决方案。