我如何在clojure中执行此操作
"text".gsub(/(\d)([ap]m|oclock)\b/, '\1 \2')
答案 0 :(得分:25)
要添加Isaac的答案,这就是在这个特殊场合使用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"
答案 1 :(得分:5)
在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
很棒,因为匹配和替换也可以是字符串/字符串或char / char,或者你甚至可以使用匹配或字符串的正则表达式模式/函数。
答案 2 :(得分:5)
您可以使用Java的replaceAll方法。这个电话看起来像是:
(.replaceAll "text" "(\\d)([ap]m|oclock)\\b" "$1 $2")
请注意,这将返回一个新字符串(如ruby中的gsub
(没有爆炸))。在Clojure中没有gsub!
的等价物,因为Java / Clojure字符串是不可变的。
答案 3 :(得分:0)
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