Как сохранить жирный, курсив и т. Д. При использовании VB Regex в макросе Word - PullRequest
0 голосов
/ 04 марта 2019

Вот макрос.Он выполняет замену, как мне требуется, но любые полужирные или курсивные совпадения заменяются простым текстом.

    Sub TEST_All_TEXT_CONVERT_COMMA_TO_HYPHEN_AT_PARAGRAPH_START()
    '
    ' TEST_All_TEXT_CONVERT_COMMA_TO_HYPHEN_AT_PARAGRAPH_START
    '
    '
Dim regExp As Object
Set regExp = CreateObject("vbscript.regexp")

With regExp
'Generic pattern
.Pattern = "(\r)([1-3 ]*[^ ]{1,15} )(\d+:\d+), (\d+\.)"
.Global = True
Selection.WholeStory
Selection = .Replace(Selection, "$1$2$3-$4")

End With
Selection.Collapse Direction:=wdCollapseEnd
'MsgBox "Done"
    End Sub

1 Ответ

0 голосов
/ 04 марта 2019

Попробуйте:

Sub TEST_All_TEXT_CONVERT_COMMA_TO_HYPHEN_AT_PARAGRAPH_START()
    Dim regExp As Object
    Set regExp = CreateObject("vbscript.regexp")

    With regExp
        'Generic pattern
        .Pattern = "(\r)([1-3 ]*[^ ]{1,15} )(\d+:\d+), (\d+\.)"
        .Global = True
        Selection.WholeStory
        'Selection = .Replace(Selection, "$1$2$3-$4")

        Dim Matches As Object
        Dim Match As Object

        Set Matches = .Execute(Selection)
        For Each Match In Matches
            Selection.Start = Match.FirstIndex
            Selection.End = Match.FirstIndex + Match.Length - 1
            Selection = .Replace(Selection, "$1$2$3-$4")
        Next Match
    End With
    Selection.Collapse Direction:=wdCollapseEnd
    'MsgBox "Done"
End Sub

Я не совсем уверен, что это сработает, но я надеюсь, что вы получите достаточно, чтобы решить вашу проблему.Вместо обработки всего текста за один раз, он использует метод Execute для возврата набора совпадений, которые затем обрабатываются один за другим.

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