эквивалент clojure для gsub ruby's - PullRequest
       2

эквивалент clojure для gsub ruby's

11 голосов
/ 16 сентября 2010

Как мне сделать это в ближайшем будущем

"text".gsub(/(\d)([ap]m|oclock)\b/, '\1 \2')

Ответы [ 4 ]

25 голосов
/ 16 сентября 2010

Чтобы добавить к ответу Исаака, вы должны использовать 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, вы можете использовать литералы Clojure для регулярных выражений при использовании уловки "$1 $2" (возможно, проще, чем отдельный fn в этом случае):

user> (.replaceAll (re-matcher #"(\d)([ap]m|oclock)\b" "9oclock")
                   ;           ^- note the regex literal
                   "$1 $2")
"9 oclock"
5 голосов
/ 16 сентября 2010

Вы можете использовать метод Java replaceAll . Вызов будет выглядеть так:

(.replaceAll "text" "(\\d)([ap]m|oclock)\\b" "$1 $2")

Обратите внимание, что это вернет новую строку (как gsub (без взрыва) будет в рубине). В Clojure нет эквивалента для gsub!, поскольку строка Java / Clojure неизменна.

5 голосов
/ 16 сентября 2010

Это будет replace в пространстве имен clojure.string.Вы можете найти это здесь .

Используйте это так:

(ns rep
  (:use [clojure.string :only (replace)]))
(replace "this is a testing string testing testing one two three" ;; string
         "testing" ;; match
         "Mort") ;; replacement

replace - это круто, потому что совпадение и замена также могут быть string / string или char/ char, или вы можете даже сделать шаблон / функцию регулярного выражения для совпадения или строки.

0 голосов
/ 26 ноября 2013

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...