在Clojure中用*替换*

seb*_*ebi 6 string replace clojure

如何逃避"*""\*"Clojure中?似乎无法让它工作:

(s/replace "A*B" #"*" "*")产生 "A*B"(当然)

(s/replace "A*B" #"*" "\*") 失败: Unsupported escape character: *

(s/replace "A*B" #"*" "\\*")又产生 "A*B"了!

(s/replace "A*B" #"*" "\\\*")失败了:Unsupported escape character: *再次!

(s/replace "A*B" #"\\\\*" "*") 产生 "A\\*B"

我不能让它产生A\*B 任何想法?谢谢

slo*_*oth 7

你必须使用4个反斜杠:

> (println (clojure.string/replace "A*B" #"\*" "\\\\*"))
A\*B
nil
>  
Run Code Online (Sandbox Code Playgroud)

或者,没有正则表达式,它只是:

> (println (clojure.string/replace "A*B" "*" "\\*"))
A\*B
nil
>  
Run Code Online (Sandbox Code Playgroud)

要将其用作正则表达式模式,请使用以下re-pattern函数:

> (def p (clojure.string/replace "A*B" #"\*" "\\\\*"))
#'sandbox17459/p
> (println p)
A\*B
nil
> (clojure.string/replace "BLA*BLA" (re-pattern p) "UH")
"BLUHLA"
>  
Run Code Online (Sandbox Code Playgroud)