Clojure. Использование Regex для замены подстрок с одинаковым количеством символов - PullRequest
1 голос
/ 16 февраля 2020

Мне нужно заменить символы в подстроке для пробелов, когда она окружена звездочками:

(def my-line "Lorem ipsum dolor, *consetetur*, invidunt ut *labore et dolore magna aliquyam* erat")

(clojure.string/replace my-line #"\*(.*?)\*" "    ")

, но мой код тупой и задает число c пробелов и то, что мне нужно заменить одинаковое количество символов пробелами:

consetetur = 9 spaces
labore et dolore magna aliquyam = 31 

1 Ответ

0 голосов
/ 16 февраля 2020

Решение.

Как упоминалось в andy_fingerhut, вектор создается и пропускается, когда регулярные выражения записывают группы символов:

 (clojure.string/replace my-line #"\*(.*?)\*" #(.toUpperCase (%1 1)))
=> "Lorem ipsum dolor sit amet, CONSETETUR, tempor invidunt ut LABORE ET DOLORE MAGNA ALIQUYAM erat, sed diam"

Так что в моем case:

(clojure.string/replace my-line #"\*(.*?)\*" 
       #(clojure.string/join (take (count (% 1)) (repeat " "))))
=> "Lorem ipsum dolor sit amet,           , tempor invidunt ut                                 erat, sed diam"
...