Страницы

Поиск по вопросам

четверг, 13 февраля 2020 г.

Как в Sublime Text сделать множественную замену?

#регулярные_выражения #sublime_text


Русскую букву о мне нужно заменить на {о|o}, русскую букву а на {a|a} и так далее,
список большой. Возможно ли это средствами Sublime Text? 
    


Ответы

Ответ 1



Делаю в Notepad++. Включена замена с регулярными выражениями, новые строки отключены. Отмечен флажок Учитывать регистр. Начальный текст БЭМ в том числе ориентировался на максимизацию производительности. Один класс - это очень быстро. Один тег - тоже. А вот атрибуты - это уже гораздо медленее. А так, по самой идеологии проблем не вижу. Ещё по поводу валидности разметки - кастомные теги должны содержать дефис. Замена 1 Добавляем в конец всех строк посторонние символы, которые мы собираемся вставить в замене в зависимости от найденных: $ aeocrAEOCM БЭМ в том числе ориентировался на максимизацию производительности.aeocrAEOCM Один класс - это очень быстро. Один тег - тоже.aeocrAEOCM А вот атрибуты - это уже гораздо медленее.aeocrAEOCM aeocrAEOCM А так, по самой идеологии проблем не вижу.aeocrAEOCM aeocrAEOCM Ещё по поводу валидности разметки - кастомные теги должны содержать дефис.aeocrAEOCM Упрощающий шаг Создаём новый документ со следующим содержимым: аеосгАЕОСМaeocrAEOCM В нём выполняем замену (.)(?=.{9}(.)) $1\(?=.*\($2\)\)| Результат: а(?=.*(a))|е(?=.*(e))|о(?=.*(o))|с(?=.*(c))|г(?=.*(r))|А(?=.*(A))|Е(?=.*(E))|О(?=.*(O))|С(?=.*(C))|М(?=.*(M))|aeocrAEOCM Замена 2 Собственно выполняем нужную замену: (?=а(?=.*(a))|е(?=.*(e))|о(?=.*(o))|с(?=.*(c))|г(?=.*(r))|А(?=.*(A))|Е(?=.*(E))|О(?=.*(O))|С(?=.*(C))|М(?=.*(M)))(.) {$11|$1$2$3$4$5$6$7$8$9$10} БЭ{М|M} в т{о|o}м чи{с|c}л{е|e} {о|o}ри{е|e}нтир{о|o}в{а|a}л{с|c}я н{а|a} м{а|a}к{с|c}имиз{а|a}цию пр{о|o}изв{о|o}дит{е|e}льн{о|o}{с|c}ти.aeocrAEOCM {О|O}дин кл{а|a}{с|c}{с|c} - эт{о|o} {о|o}ч{е|e}нь бы{с|c}тр{о|o}. {О|O}дин т{е|e}{г|r} - т{о|o}ж{е|e}.aeocrAEOCM {А|A} в{о|o}т {а|a}трибуты - эт{о|o} уж{е|e} {г|r}{о|o}р{а|a}зд{о|o} м{е|e}дл{е|e}н{е|e}{е|e}.aeocrAEOCM aeocrAEOCM {А|A} т{а|a}к, п{о|o} {с|c}{а|a}м{о|o}й ид{е|e}{о|o}л{о|o}{г|r}ии пр{о|o}бл{е|e}м н{е|e} вижу.aeocrAEOCM aeocrAEOCM {Е|E}щё п{о|o} п{о|o}в{о|o}ду в{а|a}лидн{о|o}{с|c}ти р{а|a}зм{е|e}тки - к{а|a}{с|c}т{о|o}мны{е|e} т{е|e}{г|r}и д{о|o}лжны {с|c}{о|o}д{е|e}рж{а|a}ть д{е|e}фи{с|c}.aeocrAEOCM Замена 3 Удаляем хвосты с мусором, а именно, заменяем aeocrAEOCM$ на пустоту. Не потерять знак $ в конце. Готово: БЭ{М|M} в т{о|o}м чи{с|c}л{е|e} {о|o}ри{е|e}нтир{о|o}в{а|a}л{с|c}я н{а|a} м{а|a}к{с|c}имиз{а|a}цию пр{о|o}изв{о|o}дит{е|e}льн{о|o}{с|c}ти. {О|O}дин кл{а|a}{с|c}{с|c} - эт{о|o} {о|o}ч{е|e}нь бы{с|c}тр{о|o}. {О|O}дин т{е|e}{г|r} - т{о|o}ж{е|e}. {А|A} в{о|o}т {а|a}трибуты - эт{о|o} уж{е|e} {г|r}{о|o}р{а|a}зд{о|o} м{е|e}дл{е|e}н{е|e}{е|e}. {А|A} т{а|a}к, п{о|o} {с|c}{а|a}м{о|o}й ид{е|e}{о|o}л{о|o}{г|r}ии пр{о|o}бл{е|e}м н{е|e} вижу. {Е|E}щё п{о|o} п{о|o}в{о|o}ду в{а|a}лидн{о|o}{с|c}ти р{а|a}зм{е|e}тки - к{а|a}{с|c}т{о|o}мны{е|e} т{е|e}{г|r}и д{о|o}лжны {с|c}{о|o}д{е|e}рж{а|a}ть д{е|e}фи{с|c}.

Ответ 2



Есть подозрение, что данная задача является дубликатом. Регулярное выражение для замены ровно то же как и в этом ответе: https://ru.stackoverflow.com/a/512787/481 но строка замены: {$1|$2} В ссылке выше подробно расписано как сделать подобную замену одним регулярным выражением в один проход.

Комментариев нет:

Отправить комментарий