1

Тема: Поиск и замена по последней букве заголовков

Здравствуйте!
Есть термины вида:
Абади симптом (J. A. Abadie, 1873-1932, франц. невропатолог) - отсутствие болезненности при сдавливании пяточного (ахиллова) сухожилия; наблюдается при tabes dorsalis

абазия (abasia; а- + греч. basis шаг) - неспособность ходить, связанная с расстройствами равновесия тела или с двигательными нарушениями нижних конечностей (параличами, гиперкинезами, мышечными спазмами)

абдукционный феномен - сужение зрачка при интенсивном отведении глаза; наблюдается при некоторых поражениях ц. н. с.

абдукция (лат. abductio, от abduco, abductum отводить) - см. Отведение

Именно с таким форматирование. Надо после заголовков, выделенных жирным, поставить длинное тире.
Перепробовал
^?^w находит только промежутки между словами, а не конец заголовка. /Формат: шрифт полужирный/
^?^w( не находит ничего /Формат: шрифт полужирный/ - логично
^?^w( находит, но всё подряд
^w( тоже самое. Но это самое удобно для последующей автозамены.

Повозился с комбинациями >. Тоже без успеха...

Вот уже на этапе поиска затыка. А как ещё подстановку после заголовка длинного тире сделать?

2

Re: Поиск и замена по последней букве заголовков

Хотел бы предложить вам следующий вариант для замены:
Найти:          " - "    (то есть пробел, тире, пробел)
Заменить на: " ^~ " (то есть пробел, символы длинного тире ^~, пробел)

При этом программа найдет все тире и заменит их на длинные тире. В принципе, по правилам форматирования текстов, почти всегда тире между двумя пробелами лучше преобразовать в длинное тире (в отличие от случая "1873-1932", где принято оставлять обычное тире).

Подойдет ли вам такое решение?

Удобной и приятной работы в Word!
Перевести спасибо на Яндекс кошелёк - 41001162202962; на WebMoney - R581830807057.

3

Re: Поиск и замена по последней букве заголовков

Спасибо большое за предложенный вариант!
Но я, видимо, не совсем правильно сформулировал задачу.
Мне нужно определения вида:

Абади симптом (J. A. Abadie, 1873-1932, франц. невропатолог) - отсутствие болезненности при сдавливании пяточного (ахиллова) сухожилия; наблюдается при tabes dorsalis

абазия (abasia; а- + греч. basis шаг) - неспособность ходить, связанная с расстройствами равновесия тела или с двигательными нарушениями нижних конечностей (параличами, гиперкинезами, мышечными спазмами)

абдукционный феномен - сужение зрачка при интенсивном отведении глаза; наблюдается при некоторых поражениях ц. н. с.

абдукция (лат. abductio, от abduco, abductum отводить) - см. Отведение

Преобразовать в:

Абади симптом -- (J. A. Abadie, 1873-1932, франц. невропатолог) отсутствие болезненности при сдавливании пяточного (ахиллова) сухожилия; наблюдается при tabes dorsalis

абазия -- (abasia; а- + греч. basis шаг)  неспособность ходить, связанная с расстройствами равновесия тела или с двигательными нарушениями нижних конечностей (параличами, гиперкинезами, мышечными спазмами)

абдукционный феномен -- сужение зрачка при интенсивном отведении глаза; наблюдается при некоторых поражениях ц. н. с.

абдукция -- (лат. abductio, от abduco, abductum отводить) см. Отведение

Вот в этом для меня и состояла проблема. Как сказать Word: найти только последний символ выделенный жирным и поставить за ним длинное тире?

PS Список из 3000 определений дюже не хочется руками править под требование методички. Вот поэтому и решил, что "лучше день потерять, а потом за пять минут долететь".

4

Re: Поиск и замена по последней букве заголовков

Вот макрос:

Sub Макрос2()
'
' Макрос2 Макрос
'
'
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "[^0032^0160]{2;}"
        .Replacement.Text = Chr(32)
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchWildcards = True
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "[^0032][^0045^0150][^0032]"
        .Replacement.Text = Chr(32) & Chr(151) & Chr(32)
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchWildcards = True
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "[^0032][^0045^0150^0151]{2}[^0032]"
        .Replacement.Text = Chr(32) & Chr(151) & Chr(32)
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchWildcards = True
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    Do
    With Selection.Find
        .Text = "[A-zА-яЁё0-9][^0032][^0040]"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchWildcards = True
        .Execute
            If Selection.Characters.First.Font.ColorIndex = wdRed Then
                Exit Do
            End If
                    If Selection.Characters.First.Font.Bold = -1 Then
                        Selection.Characters(2).Text = Chr(32) & Chr(151) & Chr(32)
                    Else
                        Selection.Characters.First.Font.ColorIndex = wdRed
                    End If
    End With
    Loop
    ActiveDocument.Select
    Selection.Font.ColorIndex = wdAuto
End Sub

1. Откройте список отдельным документом
2. Запустите макрос.
3. В начале макрос проверит текст на наличие лишних пробелов и удалит их.
4. Затем производится автозамена дефисов и средних тире на длинное тире.
5. Затем производится замена 2-х дефисов и средних тире на длинное тире.
6. Затем идет цикл поиска любой буквы или цифры+пробел+открывающая скобка, если 1 символ найденной комбинации полужирный, то 2-й символ заменяется на длинное тире с пробелами, если 1-й символ обычный, то он отмечается красным цветом, это нужно для определения завершения цикла.
7. Затем выделяется весь документ и знакам присваивается цвет Авто

5

Re: Поиск и замена по последней букве заголовков

ОГРОМНОЕ спасибо!
Всё прекрасно работает.