2013-07-24 27 views
5

Làm cách nào để thoát khỏi số "*" đến "\*" trong clojure? dường như không thể có được nó để làm việc:Thay thế * bằng * trong Clojure

(s/replace "A*B" #"*" "*") sản xuất "A*B" (tất nhiên)

(s/replace "A*B" #"*" "\*") thất bại: Unsupported escape character: *

(s/replace "A*B" #"*" "\\*") sản xuất "A*B" một lần nữa!

(s/replace "A*B" #"*" "\\\*") không thành công: Unsupported escape character: * một lần nữa!

(s/replace "A*B" #"\\\\*" "*") sản xuất "A\\*B"

tôi không thể lấy nó để sản xuất A\*B Bất kỳ ý tưởng? Cảm ơn

Trả lời

6

Bạn phải sử dụng 4 backslashes:

> (println (clojure.string/replace "A*B" #"\*" "\\\\*")) 
A\*B 
nil 
> 

hay, mà không có một regex, nó chỉ đơn giản là:

> (println (clojure.string/replace "A*B" "*" "\\*")) 
A\*B 
nil 
> 

Để sử dụng điều này như một mẫu regex, sử dụng re-pattern chức năng :

> (def p (clojure.string/replace "A*B" #"\*" "\\\\*")) 
#'sandbox17459/p 
> (println p) 
A\*B 
nil 
> (clojure.string/replace "BLA*BLA" (re-pattern p) "UH") 
"BLUHLA" 
> 
+0

Điều đó chỉ hoạt động khi bạn pr int kết quả: người dùng => (clojure.string/thay thế "A * B" # "\ *" "\\\\") "A \\ * B" user => (clojure.string/replace "A * B" "*" "\\ *") "A \\ * B" Tôi phải sử dụng kết quả trong một regex. Tôi không muốn in nó. – sebi

+0

@sebi Tôi đã cập nhật câu trả lời của mình. – sloth

+0

Tôi muốn thay thế "BLA * BLA" thành "BLA \\ * BLA" - chuỗi chính xác này. Thật buồn cười, ví dụ bạn đã cho tôi không hoạt động .... – sebi

Các vấn đề liên quan