回答
您可以使用Java的replaceAll方法。呼叫看起來像:
(.replaceAll "text" "(\\d)([ap]m|oclock)\\b" "$1 $2")
注意這將返回(在紅寶石一樣gsub
(沒有爆炸)會)一個新的字符串。因爲Java/Clojure字符串是不可變的,所以在Clojure中沒有相應的gsub!
。
這將是在clojure.string命名空間replace
。你可以找到它here。
使用它,像這樣:
(ns rep
(:use [clojure.string :only (replace)]))
(replace "this is a testing string testing testing one two three" ;; string
"testing" ;; match
"Mort") ;; replacement
replace
是真棒,因爲比賽和更換,也可以串/串或炭/炭,或者你甚至可以做匹配或字符串的正則表達式/功能。
爲了增加以撒的答案,你這是怎麼會在這個特定的場合使用clojure.string/replace
:
user> (str/replace "9oclock"
#"(\d)([ap]m|oclock)\b"
(fn [[_ a b]] (str a " " b)))
; ^- note the destructuring of the match result
;^- using an fn to produce the replacement
"9 oclock"
爲了增加sepp2k的答案,這是在使用"$1 $2"
你如何利用Clojure的正則表達式文字的優勢噱頭(可以說是比單獨的fn
簡單在這種情況下):
user> (.replaceAll (re-matcher #"(\d)([ap]m|oclock)\b" "9oclock")
; ^- note the regex literal
"$1 $2")
"9 oclock"
很好的使用破壞沒有想到這一點。但我需要一個更通用的解決方案,所以我要用第二個選項。 – Surya 2010-09-16 19:20:04
實際上我會認爲基於功能的解決方案更加「通用」,但需要花費一定的額外擊鍵。 (想象一下用第一個字符串表示長度來代替第一個字符串:''asdf「' - >''4」';用'$ 1'&Co.不能實現。另一方面,任何你可以用'$ 1'也可以用一個函數完成)。儘管如此,沒有關於更簡單的選項可能更適合的爭論。 – 2010-09-16 20:20:40
感謝您提供示例!我時間不夠,但可能應該讓我的回答更清楚。我也喜歡'replace'函數的普遍性和強大性,但可以看到'.replaceAll'方法的簡單性。 – Isaac 2010-09-16 23:07:56
的Clojure的contrib現在有re-gsub如STR-utils的一部分:
user=> (def examplestr (str "jack and jill" \newline "went up the hill"))
#'user/examplestr
user=> (println examplestr)
jack and jill
went up the hill
nil
user=> (println (re-gsub #"\n" " " examplestr))
jack and jill went up the hill
nil
該鏈接現已死亡。它是否被重命名或刪除? – 2015-12-13 17:12:09
- 1. 的setInterval()等效紅寶石
- 2. 紅寶石GSUB字符串
- 3. strip/gsub恢復紅寶石
- 4. 紅寶石GSUB功能
- 5. 紅寶石GSUB返回值
- 6. 紅寶石GSUB '<' and '>'
- 7. 紅寶石使用GSUB
- 8. 紅寶石先進GSUB
- 9. clojure與紅寶石
- 10. Python的等效的Perl /紅寶石||的=
- 11. 紅寶石中「pass」的等效代碼
- 12. C#BitConverter.ToSingle的紅寶石等效
- 13. 什麼是'等'紅寶石的寶石?
- 14. 等效紅寶石obj.send在python
- 15. 紅寶石等效PHP函數openssl_pkey_get_public
- 16. 紅寶石。 GSUB單斜線組合\&\」 \ + \ 0
- 17. 紅寶石雙斜線GSUB問題
- 18. 如何使用GSUB紅寶石
- 19. 紅寶石GSUB部分匹配
- 20. 紅寶石使用GSUB串插內
- 21. 紅寶石GSUB通過陣列
- 22. 紅寶石GSUB工作不正常
- 23. 轉義字符紅寶石`gsub`
- 24. 平等紅寶石vs rspec
- 25. 不等於不紅寶石
- 26. 紅寶石等同於JS
- 27. 紅寶石,等待回調
- 28. 紅寶石陣列平等
- 29. Twitter的紅寶石寶石
- 30. 紅寶石。每個效率
對不起,我的意思是gsub。感謝這是有道理的。 – Surya 2010-09-16 17:35:53
請修復[replaceAll]的鏈接(http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#replaceAll(java.lang.String,java.lang.String) ) 方法。 – 2012-02-10 07:27:08
@CMPITG剛剛做到了。感謝您的通知。 – sepp2k 2012-02-10 10:56:23