MS Word 2016 Macro Regex Заменить - PullRequest
0 голосов
/ 23 января 2019

Я пытаюсь кодировать макрос, используя Regex, и мой шаблон \(\bTopic \d+\b\), и макрос должен удалить (Тема 1) и (Тема 2) из всех вопросов ввесь документ, но мой код макроса не работает.Спасибо за вашу помощь.

Ввод:

ВОПРОС №: 1 (Тема 1)

ВОПРОС №: 15 (Тема 2)

Результат должен быть

№ ВОПРОСА: 1

№ ВОПРОСА: 15

Код макроса

Sub RemoveQuestionTopic()
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "\(\bTopic \d+\b\)"
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = True
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
End Sub

Ответы [ 2 ]

0 голосов
/ 23 января 2019

Синтаксис регулярного выражения отличается от обычного регулярного выражения. Если вы замените выражение на это:

.Text = "\(Topic ([0-9]@>)\)"

вы получите ожидаемый результат. В этом случае нет необходимости использовать VBScript.Regexp.

0 голосов
/ 23 января 2019

Функциональность Find обеспечивает очень ограниченную поддержку регулярных выражений.Вам нужно использовать VBScript.Regexp, как показано ниже.

Попробуйте этот код:

Sub RemoveQuestionTopic()
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting

    strReplacementText = "++__++"
    ActiveDocument.Select
    Set objReg = CreateObject("VBScript.Regexp")
    objReg.Pattern = "\s*\(Topic\s*\d+\)"
    objReg.Global = True
    Selection.Text = objReg.Replace(Selection.Text, strReplacementText)

    With Selection.Find
        .MatchWildcards = True
        .Text = strReplacementText
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = True
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
End Sub

Regex Demo

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...