UncleFather » 14 фев 2014 12:57, Пт
Оказывается, Microsoft Office Word обладает широкими возможностями по поиску (и замене). Даже в обычном режиме замены можно делать хитрые операции. Но вот если включить режим «подстановочные знаки» («wildcards»), то можно просто творить чудеса. Эти самые «wildcards» очень близки к так называемым «регулярным выражениям» («regular expressions»), используемых при поиске и замене во многих программах для автоматической обработки текста.
Этот текст нужно отформатировать для вставки на форум phpBB так, чтобы каждая строка текста, начинающаяся со знака «/», за которым идет наименование ключа запуска, а затем, через тире - объяснение действия этого ключа представляла бы собой элемент списка. При этом, наименование ключа запуска должно быть выделено курсивом и жирным шрифтом, а пустое расстояние между строками списка должно быть удвоенным.
Другими словами, каждый символ «/», стоящий в начале строки должен быть заменен на сочетание: два переноса строки и [*] /, затем нужно найти в строке первое сочетание символов «пробел тире пробел» и вставить перед ним сочетание символов [ /b][ /i]
Выполняем первую замену:
-
В MS Word нажимаем Ctrl+H либо Правка -> Заменить
-
В поле «Найти» вписываем выражение:
-
В поле «Заменить на» вписываем выражение:
-
Жмем «Заменить все» и получаем результат:
Выполняем вторую замену:
-
Снова MS Word нажимаем Ctrl+H либо Правка -> Заменить
-
Устанавливаем галочку «Подстановочные знаки»
-
В поле «Найти» вписываем выражение:
(^13^13^13?????b??i?/*)( - )
Выражение в поиске может содержать несколько наборов круглых скобок, в данном случае два. Сами круглые скобки никак не влияют на поиск, ищет Word то же выражение, как если бы этих скобок не было. А вот все, что находится в скобках, нумеруется. В итоге получаем сколько скобок, столько частей текста и будет возвращено при каждом нахождении такого вхождения. То есть в данном случае каждое найденное вхождение будет состоять из двух частей \1 и \2.
-
В поле «Заменить на» вписываем выражение:
Здесь выражение \1 означает «первый искомый текст» - та первая часть из формулы поиска, которую мы нашли. То есть между первой частью \1 и второй частью \2 найденного текста мы вставляем закрывающие тэги BBCode «/b» и «/i»
-
Жмем «Заменить все» и получаем результат:
В качестве примера рассмотрим опять же текст, размещаемый на форуме PHPBB3.
После ввода на мой форум новых BBCode («table», «tr» и «td»), позволяющих оформлять пост в виде таблицы, захотелось мне переоформить пост ОКДП для комплектующих ПК + классификаторы ОКДП и ОКПД из списка в таблицу.
То есть нужно:
-
Найти в тексте последовательность
и заменить на
^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]
-
Найти в тексте последовательность
и заменить на пустую строку, без пробелов
PS: Достаточно подробное и хорошее описание возможностей поиска, оказывается есть во встроенной справке MS Word:
Оказывается, [b]Microsoft Office Word[/b] обладает широкими возможностями по поиску (и замене). Даже в обычном режиме замены можно делать хитрые операции. Но вот если включить режим «[b][i]подстановочные знаки[/i][/b]» («[b][i]wildcards[/i][/b]»), то можно просто творить чудеса. Эти самые «[b][i]wildcards[/i][/b]» очень близки к так называемым «[b][i]регулярным выражениям[/i][/b]» («[b][i]regular expressions[/i][/b]»), используемых при поиске и замене во многих программах для автоматической обработки текста.
[b][size=150][center]Первый пример[/center][/size][/b]
[spoiler title=В качестве примера рассмотрим часть текста:][attachment=8]01.JPG[/attachment][/spoiler]
Этот текст нужно отформатировать для вставки на форум [url=http://ru.wikipedia.org/wiki/PhpBB]phpBB[/url] так, чтобы каждая строка текста, начинающаяся со знака «[b][i]/[/i][/b]», за которым идет наименование ключа запуска, а затем, через тире - объяснение действия этого ключа представляла бы собой элемент списка. При этом, наименование ключа запуска должно быть выделено курсивом и жирным шрифтом, а пустое расстояние между строками списка должно быть удвоенным.
Другими словами, каждый символ «[b][i]/[/i][/b]», стоящий в начале строки должен быть заменен на сочетание: два переноса строки и [b][i][*] [b][i]/[/i][/b], затем нужно найти в строке первое сочетание символов «[b][i]пробел тире пробел[/i][/b]» и вставить перед ним сочетание символов [b][i][ /b][ /i][/i][/b]
[size=130][b]Выполняем первую замену:[/b][/size]
[list=1][*] В MS Word нажимаем [b][i]Ctrl+H[/i][/b] либо [b][i]Правка -> Заменить[/i][/b]
[*] В поле «[b][i]Найти[/i][/b]» вписываем выражение:
[quote]^p/[/quote]
[*] В поле «[b][i]Заменить на[/i][/b]» вписываем выражение:
[quote]^p^p^p[ *] [ b][ i]/[/quote]
[spoiler][attachment=9]02.JPG[/attachment][/spoiler]
[*] Жмем «[b][i]Заменить все[/i][/b]» и получаем результат:
[spoiler][attachment=7]03.JPG[/attachment][/spoiler][/list]
[size=130][b]Выполняем вторую замену:[/b][/size]
[list=1][*] Снова MS Word нажимаем [b][i]Ctrl+H[/i][/b] либо [b][i]Правка -> Заменить[/i][/b]
[*] Устанавливаем галочку «[b][i]Подстановочные знаки[/i][/b]»
[*] В поле «[b][i]Найти[/i][/b]» вписываем выражение:
[quote](^13^13^13?????b??i?/*)( - )[/quote]
Выражение в поиске может содержать несколько наборов круглых скобок, в данном случае два. Сами круглые скобки никак не влияют на поиск, ищет Word то же выражение, как если бы этих скобок не было. А вот все, что находится в скобках, нумеруется. В итоге получаем сколько скобок, столько частей текста и будет возвращено при каждом нахождении такого вхождения. То есть в данном случае каждое найденное вхождение будет состоять из двух частей \1 и \2.
[*] В поле «[b][i]Заменить на[/i][/b]» вписываем выражение:
[quote]\1[/i][/b]\2[/quote]
Здесь выражение \1 означает «первый искомый текст» - та первая часть из формулы поиска, которую мы нашли. То есть между первой частью \1 и второй частью \2 найденного текста мы вставляем закрывающие тэги BBCode «/b» и «/i»
[spoiler][attachment=6]04.JPG[/attachment][/spoiler]
[*] Жмем «[b][i]Заменить все[/i][/b]» и получаем результат:
[spoiler][attachment=5]05.JPG[/attachment][/spoiler][/list]
[b][size=150][center]Второй пример[/center][/size][/b]
В качестве примера рассмотрим опять же текст, размещаемый на форуме PHPBB3.
После ввода на мой форум новых BBCode ([b][i]«table», «tr» и «td»[/i][/b]), позволяющих оформлять пост в виде таблицы, захотелось мне переоформить пост [url=http://manaeff.ru/forum/viewtopic.php?f=22&t=848]ОКДП для комплектующих ПК + классификаторы ОКДП и ОКПД[/url] из списка в таблицу.
[spoiler title=Было так:][attachment=3]01.jpg[/attachment][/spoiler]
[spoiler title=Хочется так:][attachment=2]02.jpg[/attachment][/spoiler]
[spoiler title=Часть текста старого сообщения:][attachment=1]011.jpg[/attachment][/spoiler]
[spoiler title=Часть текста нового сообщения:][attachment=0]012.jpg[/attachment][/spoiler]
То есть нужно:
[list=1][*] Найти в тексте последовательность [quote][hr][/hr]^p^p[ *] [ b][/quote] и заменить на [quote]^p[ tr=row2][ td=1,row2,2][ center][ b]
[/quote]
[*] Включить [b]подстановочные знаки[/b], найти в тексте последовательность [quote](<[0-9][0-9][0-9][0-9][0-9][0-9][0-9]>) - (*)/b?: [/quote] и заменить на [quote]\1[ /b][ /center][ /td][ td=1,row2,30][ b]\2/b][ /td][ td=2,row2,68][/quote]
[*] Выключить [b]подстановочные знаки[/b], найти в тексте последовательность [quote]^p^p[ tr=row2][ td=1,row2,2] [ center][ b][/quote] и заменить на [quote][ /td][ /tr]^p^p[ tr=row2][ td=1,row2,2][center][b][/quote]
[*] Найти в тексте последовательность [quote][ /b][ /td][ td=2,row2,68]^p[/quote] и заменить на [quote][ /b][ /td][ td=2,row2,68][/quote]
[*] Найти в тексте последовательность [quote]^p^p[/quote] и заменить на пустую строку, без пробелов[/list]
PS: Достаточно подробное и хорошее описание возможностей поиска, оказывается :wink: есть во встроенной справке MS Word:
[spoiler][attachment=4]06.JPG[/attachment][/spoiler]