Массовое редактирование текста

Материал из Blender3D.

Перейти к: навигация, поиск

Наверняка вы уже стокнулись с проблемой, когда вам нужно во всем тексте найти надписи типа

Рис. 1 Яблоко на столе
Рис. 2 Яблоко в разрезе

и заменить их на соответствующие ссылки на изображения, типа

 
 [[image:my_article_illustration_1.png|thumb|200px| Рис. 1 Яблоко на столе]]
 [[image:my_article_illustration_2.png|thumb|200px| Рис. 2 Яблоко в разрезе]]

Вы уже начинаете чувствовать себя самураем, и готовитесь к подвигу "поправить вручную 200 ссылок"?

Не торопитесь! Есть путь проще и гораздо быстрее!

Вы наверняка слышали о regexp. Это система регулярных выражений для работы с текстом в unix системах. В общих чертах, эта система заключается в поиске области символов в тексте по некоторой маске и замене их в соответствии с некоторыми принципами.

Я вам покажу как выполнить описанную выше задачу. Все остальное можно будет быстро разобрать на примерах.

Regexp fo gedit

Во первых, вам понадобиться расширение regexp для gedit (я пользуюсь gnome, поэтому советы даю относительно этого редактора):

  • Скачайте расширение здесь (Если ссылка не работает - посмотрите на странице расширений для gedit)
  • Распакуйте архив
  • Создайте директорию ~/.gnome2/gedit/extensions/
  • Скопируйте все содержимое архива gedit2_regex_replace_plugin в ~/.gnome2/gedit/extensions/
  • Запустите gedit, перейдите в Правка -> Параметры -> Модули и активируйте модуль Regex Search and Replace
  • Перезапустите gedit и откройте панель Regular Expressions через Сервис -> Regex Search & Replace

Пробуем автозамену

Теперь попробуем то, ради чего мы все это затеяли - сэкономить время и не стать самураем!

Скопируйте эти две строчки в gedit

Рис. 1 Яблоко на столе
Рис. 2 Яблоко в разрезе

и введите следующие параметры в поля панели Regular Expressions

 thumb

нажимаем кнопку replace all и получаем результать, как на картинке.


Не впечатлило?


А теперь представьте ситуацию, когда у вас есть статья, с упоминаниями о рисунках, в количестве 50 штук. Что вы скажете теперь?

Немного теории

Для более изощренных замен и подстановок вам потребуется немного теории о работе regexp. Давайте мы просто разберем что делает наше РегулярноеВыражение.

(Рис. )([0-9])([а-яА-Яa-zA-Z0-9 ,"'.]*)

Регулярные выражения троятся из:

  • Прямых образцов текста Рис. . Здесь мы говорим, что нужно найти строку, в которой есть 2 символов подряд Р, и, с, . и пробел, именно в таком порядке.
  • Цифры [0-9] говорит о том, что за под-строкой Рис. должны идти одна цифра из диапазона от 0 до 9. Любая, но одна.
  • Строки состоящие из диапазона символов. [а-яА-Яa-zA-Z0-9 ,"'.]* - Мы говорим, что в строке могут быть строчные буквы от а до я, прописные буквы от А до Я, строчные от a до z, прописные от A до Z, цифры от 0 до 9, а так же пробел, запятая, ковычка, опостров и точка. Знак * означает не ограниченное количество таких символов в строке.

Вы заметили, что каждое из под выражений взято в круглые скобки ( )? Это называется Объединение. В поле Replace With мы сможем вызывать значение каждого из этих объединений по их порядковому номеру.

В строке Replace With мы собираем маску, по в которой используются значения из заменяемой строки.

 [[image:my_article_illustration_\2.png|thumb|200px|\1\2\3]]
  • В начало новой строки мы добавляем неизменную часть конструкции wiki-иллюстрации [[image:my_article_illustration_
  • дальше, мы ставим номер картинки, соответствующий индексу рисунка в данной строке. Значение берется из второго объединения строки Search for - ([0-9])
  • дальше, сного, не изменяющаяся часть .png|thumb|200px|
  • затем, комментарий к изображению - полная первоначальная строка. Полную строку можно получить последовательный повторением всех объединений, используемых в маске для поиска \1\2\3. В нашем случае, регулярное выражение состояло из 3 объединений
  • и в конце, завершаем конструкцию wiki-иллюстрации ]]
Личные инструменты