Регулярные выражения — это чудо

c/coteditor-mass-re.png

Есть такая достаточно типовая задачка — применить к тексту последовательность замен по шаблону. Зачем? Ну, например, преобразовать текст из Markdown в формат разметки какой-либо CMS. В BBcode, например, для публикации на форуме. Или там на фикбук либо самиздат какой-нибудь вывесить. Везде же свои стандарты оформления. Или, чего уж проще, наоборот — почистить текст от оформления. Всяко бывает.

А что у нас для решения таких задач существует?

Во-первых, штатные средства операционной системы. awk, sed, perl, вот это всё такое. Именно на это и заточено. Через Automator можно собрать службу, быстрое действие или самостоятельное приложение на их основе, но придётся повозиться с ключами и опциями.

Во-вторых, нашёлся специализированный инструментарий в количестве двух приложений. Называются Clean Text и TextSoap. Именно для последовательного применения шаблонов замен к тексту. Первое стоит 36 баксов, второе что-то около 55. Нехило так для простых гуевых обвязок системных вызовов! Ссылок не даю и искренне желаю, чтобы у разработчиков с ихними аппетитами треснули рожи от подобной жадности.

В-третьих, есть такой отличный кодерский редактор, BBedit. Стоит столько же, сколько тот TextSoap, вот только представляет собой реально мощный инструмент разработчика. И покупать его даже не обязательно, вполне можно пользоваться бесплатным вариантом. А при нём есть набор действий, устанавливающийся под Automator, в том числе поиск-замена с регулярными выражениями. Да, и с бесплатным вариантом тоже. Опять же, можно набросать на этой основе чего угодно.

Ну и четвёртый вариант, наверное, самый идеальный. Ещё один кодерский редактор CotEditor. Совсем бесплатный. Не столь мощный, как BBedit, но раз он маленький, лёгкий и бесплатный, то чего бы его не держать у себя? Штучка-то отличная. Так у него последовательное применение замен вообще есть в качестве штатной возможности. Просто выбираем пункт «Multiple Replace…» в меню «Find», и видим там примерно то, что в шапке. Создаём пресет, добавляем в него нужную цепочку замен, и вуаля. Впредь просто выбираем его, нажимаем кнопку «Replace All», и всё само делается. На скриншоте в шапке показан пресет для уничтожения в тексте ненужных пробелов (повторных между словами и висячих на концах строк).

Кроме того, CotEditor создаёт свой словарь для AppleScript, что позволяет делать аналогичные вещи скриптами. Шаблон следующий:



tell application "CotEditor"
	if not (exists front document) then return
	tell front document
		replace for "ШАБЛОН1" to "ЗАМЕНА1" with RE and all
		replace for "ШАБЛОН2" to "ЗАМЕНА2" with RE and all
	end tell
end tell

Замен может быть столько, сколько нужно.