1

Я не могу придумать подходящий шаблон (наверное, это должно быть [!]) что исключило бы из выражения

argument[oales]{1,4}

следующие три слова

аргумент ос
аргумент а
аргумент как

Другими словами, я хотел бы найти только следующие три слова

аргумент о
аргумент аль
аргумент эль

так что, возможно, это аргумент выражения argument[oales]{1,4} который не подходит для начала.

Обратите внимание, что я на самом деле пытаюсь найти «шаблонное выражение», чтобы использовать его с любым другим морфологическим словом family; Таким образом, эти три слова являются просто примерами.

Я бы использовал этот шаблон в макросе и, возможно, в опции «Найти и заменить» для реализации замен в пакете.

В противном случае, какой-нибудь надстройка или сторонний программный инструмент поиска и замены выполнят эту работу?

Обновить

Вот макрос, который я использую.

Sub ReplaceFromTableList()

Dim oChanges As Document, oDoc As Document
Dim oTable As Table
Dim oRng As Range
Dim rFindText As Range, rReplacement As Range
Dim i As Long
Dim sFname As String
Dim sAsk As String

    sFname = "C:\Users\Win7\Desktop\macro.docx" 'The table document
    Set oDoc = ActiveDocument
    Set oChanges = Documents.Open(FileName:=sFname, Visible:=False)
    Set oTable = oChanges.Tables(1)

    For i = 1 To oTable.Rows.Count
        Set oRng = oDoc.Range
        Set rFindText = oTable.Cell(i, 1).Range
        rFindText.End = rFindText.End - 1
        Set rReplacement = oTable.Cell(i, 2).Range
        rReplacement.End = rReplacement.End - 1

        With oRng.Find

            .ClearFormatting
            .Replacement.ClearFormatting

            Do While .Execute(FindText:=rFindText, _
                  MatchCase:=True, _
                  MatchWholeWord:=True, _
                  MatchWildcards:=True, _
                  Forward:=True, _
                  Wrap:=wdFindStop) = True

            oRng.Select
            'oRng.FormattedText = rReplacement.FormattedText
            oRng.Text = rReplacement.Text
            oRng.Collapse wdCollapseEnd

        Loop

        End With

    Next i

    oChanges.Close wdDoNotSaveChanges

lbl_Exit:
    Exit Sub

End Sub

При отладке после Runtime Error 5692, следующий раздел макроса

Do While .Execute(FindText:=rFindText, _
                  MatchCase:=True, _
                  MatchWholeWord:=True, _
                  MatchWildcards:=True, _
                  Forward:=True, _
                  Wrap:=wdFindStop) = True

отображается желтым цветом, выбранным Microsoft Word.

1 ответ1

1

К сожалению, регулярное выражение в Word не поддерживает ни альтернативы | , ни "ноль или более" квантификаторы (* или {0,1}), поэтому я боюсь, что нет прямого способа сделать это.

Вам нужно искать каждую форму в отдельном поиске.

Обновить

Перечитав ваш вопрос, я понял, что вы будете использовать его в макросе, к счастью, регулярные выражения отличаются, вы можете использовать:

argument(o|al|ales)^

Где | разделяет необязательные части, а ^ - это конец слова (обратите внимание на использование () вместо []).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .