1

Тема: Поиск и добивка найденного выражения

Ищу в документе строчку вида:

068:0099:АРРР:13ч00м17с120:         :+00042,20:+00046,70:-00002,04:   %   :нн 24

вот таким вот выражением:

patern = "<(068:[0-9]{4}:[^0032А-Я0-9]@:[0-9чмс]{12}:[0-9^0032+,-:]@:[%^0032НК]@:нн [0-9]{2})"

макрос такой:

With Selection.Find
        .Text = patern
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindContinue
        .Format = True
        .MatchCase = False
        .MatchWholeWord = False
        .MatchAllWordForms = False
        .MatchSoundsLike = False
        .MatchWildcards = True
    End With
    While Selection.Find.Execute
        Selection.Range.HighlightColorIndex = wdRed
    Wend

Подскажите как к найденному выражению дописать номер по порядку (I:1.2.3.4....)
Никак не пойму, в данном случае если записать: .Replacement.Text = "\1 номер по порядку", ничего не заменяется
Если в цикле While Selection.Find.Execute написать Selection.Range.InsertBefor "номер П/П" дописывает, только к первому найденному выражению столько раз сколько найдет искомый вариант.....
Что не правильно делаю?

2

Re: Поиск и добивка найденного выражения

Потому, что после добавления 1-й замены Объект Selection.Range становится выделеным текстом замены и повторяет ее или зацикливается.
Надо потом снять выделение, чтобы курсор ушел вконец.

Selection.Collapse wdCollapseEnd

3

Re: Поиск и добивка найденного выражения

Подскажите, а как в этом случае воспользоваться  .Replacement.Text
Если я напишу:  .Replacement.Text = "\1 + еще текст" замена не происходит, почему?

Как быть если у меня шаблон поиска, как я и привел, только:

patern = "<(068:[0-9]{4}:[^0032А-Я0-9]@):([0-9чмс]{12}:[0-9^0032+,-:]@:[%^0032НК]@:нн [0-9]{2})"

Два выражения в круглых скобках.
Как достать найденный текст из этих круглых скобок?

4

Re: Поиск и добивка найденного выражения

При использовании Подстановочных знаков значения в круглых скобках означает целиковое выражение. В Вашем случае у Вас 2 выражения (068:[0-9]{4}:[^0032А-Я0-9]@) и ([0-9чмс]{12}:[0-9^0032+,-:]@:[%^0032НК]@:нн [0-9]{2}). Тогда чтобы добавить текст после всего шаблона поиска .Replacement.Text = "\1\2" + текст.
Вообще-то на Вашем месте я бы произвел сначала добавил текст номер П/П, сделав абзац каким-нибудь уникальным стилем. А затем уже написал макрос по расстановке нумерации с использованием поля Seq с привязкой к стилю и нужным форматом, чтобы потом, если возникнет необходимость удалить или добавить эту строку нумерация менялась автоматически при обновлении.

5

Re: Поиск и добивка найденного выражения

aap77.
Опишу, что я делаю:
Мне нужно вытащить из текста кусочек вида: "068:0099:АРРР" (из строки приведенной в 1 сообщении) это первая скобка из шаблона: (068:[0-9]{4}:[^0032А-Я0-9]@), далее ВСЮ строчку покрасить в красный свет и сделать закладку с текстом "068_0099_АРРР", а в конце документа вывести гиперссылки на найденные закладки.
Я это с горем пополам сделал.

Но вот разбираюсь почему, у меня в моем приведенном макросе
(см. сообщение 1::макрос With Selection.Find) если укажу: .Replacement.Text = "Err.\1" замены не происходило, а просто выделялось ЦВЕТОМ это предложение. Как оказалось не хватало этого параметра  .Execute Replace:=wdReplaceAll в With Selection.Find.

Возник такой вопрос как присвоить любой переменной найденно значение к примеру:

ищу в документе строчку:  "какой то текст 65 еще текст 01"
мой шаблон = "какой то текст ([0-9]{2}) еще текст ([0-9]{2})"
переменная_1 = \1 будет присвоено значение 65
переменная_2 = \2 будет присвоено значение 01

6

Re: Поиск и добивка найденного выражения

Товарищ Bykva_Iob!
У меня в общем есть ответ на Ваш вопрос, но мне его надо сформулировать, чтобы Вам описать, так что не обижайтесь, если Вы сможете его получить только завтра. Надо по-подробней обдумать.

7

Re: Поиск и добивка найденного выражения

В решении Вашего вопроса сложилась ситуация как при Бородино:
«Смешались в кучу кони, люди....».
Надо рассортировать все

8

Re: Поиск и добивка найденного выражения

Я буду рад прочитать ответ.
Спасибо.

9

Re: Поиск и добивка найденного выражения

У меня остался один вопрос, как переменной присвоить найденное значение (в скобках) при использовании подстановочных знаков.
Пример код в конце сообщения № 5

Спасибо.