Clojure:
Поиск и замена текста
Как это сделать:
В Clojure для поиска и замены текста мы используем функцию clojure.string/replace
. Давайте сразу перейдем к коду:
(require '[clojure.string :as str])
;; Базовая замена
(str/replace "I like apples" "apples" "oranges")
;; => "I like oranges"
;; Использование регулярного выражения для замены всех гласных
(str/replace "Hello, World!" "[AEIOUaeiou]" "*")
;; => "H*ll*, W*rld!"
;; Замена с функцией для динамических изменений
(str/replace "I have 2 apples and 5 bananas"
#"\d+"
(fn [match] (str (inc (Integer/parseInt match)))))
;; => "I have 3 apples and 6 bananas"
Всё просто. Запустите это, и вы сразу увидите преобразования прямо в вашем REPL.
Подробнее
Поиск и замена текста – это не новинка. Это старые вычислительные технологии. Мы унаследовали их от ранних редакторов, таких как sed
в Unix. С тех пор мы проделали долгий путь.
Clojure, работающий на JVM, означает, что у вас под капотом есть мощь регулярных выражений Java. С точки зрения производительности, это прекрасно для быстрых скриптов, но помните, что чрезмерное использование при масштабной обработке текста может снизить производительность.
Что касается альтернатив, помимо clojure.string/replace
, есть библиотеки, основанные на регулярных выражениях, или даже написание вашей собственной функции, если вы чувствуете в себе смелость. Подумайте о replace-first
, если вам нужно однократное изменение.
С функциональной точки зрения, подход Clojure к неизменяемости означает, что каждая замена приводит к созданию новой строки. Отсутствие изменяемых строк означает меньше ошибок и сюрпризов.
Смотрите также
Чтобы углубиться, ознакомьтесь с этими ресурсами:
- Документация API
clojure.string
Clojure API documentation - О регулярных выражениях, класс Java Pattern class