Stuart Halloway дает пример
(re-seq #"\w+" "The quick brown fox")
поскольку естественный метод для нахождения соответствий regex соответствует в Clojure. В его книге эта конструкция контрастируется с повторением по matcher. Если бы все, одним заботившимся о был список соответствий, это было бы большим. Однако, что, если я хотел соответствия и их положение в строке? Существует ли лучший способ сделать это, которое позволяет мне усиливать существующую функциональность в java.util.regex с обращением к чему-то как понимание последовательности по каждому индексу в исходной строке? Другими словами, можно было бы хотеть ввести что-то как
(re-seq-map # "[0-9] +" "3a1b2c1d")
который возвратил бы карту с ключами как положение и значения как соответствия, например.
{0 "3", 2 "1", 4 "2", 6 "1"}
Уже есть ли некоторая реализация этого в существующей библиотеке, или я запишу, это (не должен быть, также может строки кода)?
Вы можете получить нужные данные из java.util.regex. Объект Matcher
.
user> (defn re-pos [re s]
(loop [m (re-matcher re s)
res {}]
(if (.find m)
(recur m (assoc res (.start m) (.group m)))
res)))
#'user/re-pos
user> (re-pos #"\w+" "The quick brown fox")
{16 "fox", 10 "brown", 4 "quick", 0 "The"}
user> (re-pos #"[0-9]+" "3a1b2c1d")
{6 "1", 4 "2", 2 "1", 0 "3"}