Статьи из блога
Удаление текста между двумя фрагментами другого текста
Денис интересуется:
Имеется следующая задача: есть документ, в этом документе имеется ненужный текст. Текст соответственно разбросан по всему документу. Перед началом каждого такого "ненужного" текста имеется фрагмент - фрагмент №1, в конце этого "ненужного" текста имеется фрагмент №2 (то есть в начале ненужного текста написано фрагмент №1 , а в конце фрагмент №2). И так по всему документу.
Хотелось бы макрос, который ищет этот "ненужный" текст и удаляет его. И, соответственно, затем (или одной задачей) удалял эти фрагменты - фрагмент №1 и фрагмент №2.
Денис, вот вариант решения (не макрос, так как он излишен в данном случае), подсказанный Александром Витером.
Допустим, по вашим условиям у вас имеется в документе такой текст:
"фрагмент №1 некий текст фрагмент №2"
Нужно удалить и "некий текст" и обе надписи "фрагмент".
Откройте диалоговое окно Найти и заменить (CTRL+H) и в поле Найти введите следующее выражение:
([Фф]рагмент №1)*([Фф]рагмент №2)
Поле Заменить оставить пустым.
Установить флажок на параметре Подстановочные знаки.
Нажмите кнопку Заменить все и вы получите то, что вы хотели.
Метки: поиск и замена | форматирование
Просмотров: 27711
Подписаться на комментарии по RSS
Версия для печати
Еще записи по вопросам использования Microsoft Word:
- 10 вопросов и ответов по редактору Word (1 часть)
- Word 2007: добавляем свою вкладку и свои команды
- Word 2007: полотно, рисунки, линии
- Word 2007: смена формата сохранения файла
- Word 97 - решение проблемы с отображением символов на линейке
- Word 97. Слияние документов как один из способов упростить свою работу
- Абзац с цветным фоном
- Автозаполняемые колонтитулы
- Автоматизация текстового набора в Word
- Автоматическая нумерация билетов
- Автоматическая расстановка переносов
- Автоматическое обновление полей при открытии документа
- Автоматическое сохранение документа при его закрытии
- Автотекст с последовательной нумерацией
- Автоформат документов
- Белый текст на синем фоне в Word 2007
- Буквица
- Быстрая смена ориентации страниц документа
- Быстрое изменение стиля форматирования текста
- Быстрое удаление границ у таблицы
- Быстрый поиск форматированного текста
- В чем различие между Автозаменой и Автотекстом
- В чем различие между стилями Обычный (Normal) и Основной текст (Body Text)?
- Ввод повторяющихся фрагментов текста в Word 2007
- Ввод часто повторяющихся фрагментов текста
Комментариев: 24
А что делать если фрагмент№2 всегда разный? Нужен макрос...
Здравствуйте, а что делать, если мне надо удалить такую штуку:
*знак обзаца*
*набор из чисел и знаков пробел* *знак обзаца*
*знак обзаца*
Например так:
*знак обзаца*
16161 178189 1 *знак обзаца*
*знак обзаца*
Вот такое все вместе как удалить? Скажите пожалуйста, буду очень благодарен.
Евгений, попробуйте в поле "Найти" ввести выражение:
^13[0-9]{5}^32[0-9]{6}^32[0-9]{1}^32^13{2}
а в поле "Заменить" то, на что заменяете или оставьте пустым.
Установите флажок на опции "Подстановочные знаки".
П.С. Я взял за основу исключительно ваш пример.
Извините, а не могли бы вы рассказать, что в подстановочных знаках значат такие символы как *знак обзаца*, *пробел*. Вообще, не могли бы вы подсказать расшифровки этих знаков в формуле? Откуда взялись эти знаки и где их посмотреть, если не трудно. Заранее благодарен.
Евгений, я вам очень рекомендую ознакомиться с этой заметкой и обязательно изучить статью С.Хозяинова (ссылка в заметке).
В данном случае знак абзаца выражен через код 13, а пробел - 32; числа выражены через диапазон значений (в квадратных скобках), а их количество задано в фигурных скобках.
Спасибо большое!
Появилась очень похажая задача, но после 2-х часов мучений над ней (все ссылки уже изучил здесь) так ничего и не вышло.
Суть проблемы в следующем. Есть текст такого вида:
+++++*конец абзаца*
русская фраза*конец абзаца*
-----*конец абзаца*
Нужно каким-то образом пронумеровать все строки "русская фраза".
Находить её у еня получалось по шаблону ^0013?русская фраза^0013. А вот если я пытаюсь добавить формат, то он добавляется и к первому и последнему абзацу, в итоге нумеруют одна строка над и под фразой. Подскажите, как это можно реализовать.
Георгий, приложите ваш документ. Не забудьте сообщить ссылку на файл.
Георгий, эту задачу можно решить за два шага.
Шаг первый:
Ищете текст тем выражением, которое работает, но его нужно немного изменить:
(^0013?)(русская фраза)(^0013) и делаем замену таким выражением(пока без форматирования): \1@#$%\2@#$%\3. Тем самым русская фраза станет уникальной и её можно будет найти не привязываясь к другим элементам текста.
Шаг второй:
Ищем выражение (@#$%)(русская фраза)(@#$%) и заменяем на \2, но уже с нужным форматированием. Я так понял, вы хотите применить стиль нумерованного списка?
Вместо @#$% можно использовать любые другие сочетания символов, которые точно не встречаются в документе.
Антон, спасибо, что отозвались, без вас у меня никак ничего не получается
Эх, не хотел захлямлять комментарии, но видимо придётся. Структуру файлика залил: http://slil.ru/28809888
Теперь что касается конечного результат, собственно самой цели, которую нужно достичь. Нужно пронумеровать все названия в тексте, причём не обычной нумерацией, а просто поставив некий счётчик после названия, т.е. "Название 01", "Название 02" и т.д. После этого всё экспортируется в обычный текстовый документ. Я разбил задачу на 2 этапа:
1. В ворде пронумеровать все названия и экспотировать результат в текст.
2. В новом созданном текстовом документе (обычный текст) поменять местами число перед названием и само название. Для этого этапа шаблон для поиска и замены сделать у меня получилось.
В идеале было бы здорово создать макрос, но времени на изучение уйдёт куда больше, чем несколько раз в неделю всё делать ручками.
Такая вот ситуация.
Александр, спасибо!
Как вариант действительно очень подойдёт. Сразу не подумал, что можно название сначала уникализировать. Но рас уж я предыдущее сообщение написал, то может есть ещё какие-то варианты, как сразу сделать счётчик после названия?
Что ж, Георгий, здесь без макроса не обойтись:
Александр, огромное спасибо!
Я немного подправил макрос и всё заработало как положено, теперь куча рутинной работы превратилось в одно нажатие кнопки
Вот что изменил:
Пытался сам разобраться в вб, что бы некоторые действия ещё добавить для поолнейшей автоматизации, но не получается что-то. Суть в том, что перед самым первым названием нет перевода строки и оно не находится. Что нужно в скприптик добавить, что бы он перед его выполнением ставил ChrW(13) в начале всего текста, а после выполнения скрипта этот перевод строки удалял?
Вот именно потому, что первое выражение не находится, я сделал условие поиска с одним абзацем в конце. Можно, конечно, добавить абзац в начало документа, тогда макрос будет выглядеть так (я так понял, что номер нужнжо ставить после текста):
Александр, протестровал скрипт - это просто нечто, теперь полный автомат. Большое вам спасибо! Всё-таки ворд + vb - это сила.
Подскажите: если есть ключевое слово в тексте, начинающееся всегда с новой строки и написанное заглавными буквами, перед которым необходимо поставить пустую строку и только один, предшествующий этому ключевому слову абзац, весь сделать полужирным начертанием, то какие подстановочные знаки использовать?
p.s.: встроенный в движок сайта редактор удаляет пустые строки…
Предложу такой вариант:
А у меня немного другая задача - выбрать уникальный текст МЕЖДУ фрагментами. Поможете?
Распознаю словарь. В нем кроме русских статей есть примечания на английском. Они выделены квадратными скобками [ и ]. Хотел бы автоматом удалить этот текст, но не получается. Словарь слишком большой (600 стр.) чтобы делать это вручную. Помогите.
решил
Доброе время суток, умные люди!
Может, у кого-то найдётся минутка помочь "блондинке" с макросом?
Как задать строку поиска для удаления оригинального названия фильма в скобках?
Например:
«Американский пирог» (American Pie) США, 1999 г.
А нужно:
«Американский пирог» США, 1999 г.
Заранее спасибо!
Спасибо всем за внимание. Ничто так не стимулирует мозг, как признание себя "блондинкой". Если кому интересно решение этой задачки:
With Selection.Find
.Text = " \(([A-Za-z0-9-:.,'\?\! ]{1;})\)"
.Replacement.Text = ""
.MatchWildcards = True
.Wrap = wdFindContinue
End With
Добрый день!
Подскажите пожалуйста. Делаю макрос в ворде для замены замены различного текста, который выделен метками. пример:" |какой-то текст| " меняем на "какой-то текст".
Текст между меток постоянно разный, а метки одинаковые.
Помогите пожалуйста.