Немного о поиске и замене в MS Word
Оказывается, Microsoft Office Word обладает широкими возможностями по поиску (и замене). Даже в обычном режиме замены можно делать хитрые операции. Но вот если включить режим «подстановочные знаки» («wildcards»), то можно просто творить чудеса. Эти самые «wildcards» очень близки к так называемым «регулярным выражениям» («regular expressions»), используемых при поиске и замене во многих программах для автоматической обработки текста.
Первый пример
В качестве примера рассмотрим часть текста:
Этот текст нужно отформатировать для вставки на форум phpBB так, чтобы каждая строка текста, начинающаяся со знака «/», за которым идет наименование ключа запуска, а затем, через тире - объяснение действия этого ключа представляла бы собой элемент списка. При этом, наименование ключа запуска должно быть выделено курсивом и жирным шрифтом, а пустое расстояние между строками списка должно быть удвоенным.
Другими словами, каждый символ «/», стоящий в начале строки должен быть заменен на сочетание: два переноса строки и [*] /, затем нужно найти в строке первое сочетание символов «пробел тире пробел» и вставить перед ним сочетание символов [ /b][ /i]
Выполняем первую замену:
-
В MS Word нажимаем Ctrl+H либо Правка -> Заменить
-
В поле «Найти» вписываем выражение:
^p/
-
В поле «Заменить на» вписываем выражение:
^p^p^p[ *] [ b][ i]/
Спойлер
-
Жмем «Заменить все» и получаем результат:
Спойлер
Выполняем вторую замену:
-
Снова MS Word нажимаем Ctrl+H либо Правка -> Заменить
-
Устанавливаем галочку «Подстановочные знаки»
-
В поле «Найти» вписываем выражение:
(^13^13^13?????b??i?/*)( - )
Выражение в поиске может содержать несколько наборов круглых скобок, в данном случае два. Сами круглые скобки никак не влияют на поиск, ищет Word то же выражение, как если бы этих скобок не было. А вот все, что находится в скобках, нумеруется. В итоге получаем сколько скобок, столько частей текста и будет возвращено при каждом нахождении такого вхождения. То есть в данном случае каждое найденное вхождение будет состоять из двух частей \1 и \2.
-
В поле «Заменить на» вписываем выражение:
\1[/i][/b]\2
Здесь выражение \1 означает «первый искомый текст» - та первая часть из формулы поиска, которую мы нашли. То есть между первой частью \1 и второй частью \2 найденного текста мы вставляем закрывающие тэги BBCode «/b» и «/i»
Спойлер
-
Жмем «Заменить все» и получаем результат:
Спойлер
Второй пример
В качестве примера рассмотрим опять же текст, размещаемый на форуме PHPBB3.
После ввода на мой форум новых BBCode («table», «tr» и «td»), позволяющих оформлять пост в виде таблицы, захотелось мне переоформить пост ОКДП для комплектующих ПК + классификаторы ОКДП и ОКПД из списка в таблицу.
Было так:
Хочется так:
Часть текста старого сообщения:
Часть текста нового сообщения:
То есть нужно:
-
Найти в тексте последовательность
^p^p[ *] [ b]
и заменить на
^p[ tr=row2][ td=1,row2,2][ center][ b]
-
Включить подстановочные знаки, найти в тексте последовательность
(<[0-9][0-9][0-9][0-9][0-9][0-9][0-9]>) - (*)/b?:
и заменить на
\1[ /b][ /center][ /td][ td=1,row2,30][ b]\2/b][ /td][ td=2,row2,68]
-
Выключить подстановочные знаки, найти в тексте последовательность
^p^p[ tr=row2][ td=1,row2,2] [ center][ b]
и заменить на
[ /td][ /tr]^p^p[ tr=row2][ td=1,row2,2]
-
Найти в тексте последовательность
[ /b][ /td][ td=2,row2,68]^p
и заменить на
[ /b][ /td][ td=2,row2,68]
-
Найти в тексте последовательность
^p^p
и заменить на пустую строку, без пробелов
PS: Достаточно подробное и хорошее описание возможностей поиска, оказывается есть во встроенной справке MS Word: