Vba 在Word宏中使用VB正则表达式时,如何保留粗体、斜体等

Vba 在Word宏中使用VB正则表达式时,如何保留粗体、斜体等,vba,ms-word,Vba,Ms Word,这是宏。 它会按照我的要求进行替换,但任何粗体或斜体匹配都会替换为纯文本 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")

这是宏。 它会按照我的要求进行替换,但任何粗体或斜体匹配都会替换为纯文本

    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
试试这个:

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
方法返回一组匹配项,然后逐一处理。

对于一些示例数据,当结果中需要纯字符串以外的任何内容时,如果在Word文档的内容上运行helpRegEx,将更容易获得帮助。您需要使用Word的内置查找/替换,使用“通配符”。“外面”有很多样品。如果需要特定搜索类型的帮助,则需要提供有关需要搜索的内容、所需结果和示例数据的信息。可以对.Find/.Replace中的VBA通配符应用程序进行编码,以支持替换、替换或任何您需要的操作。然而,为了帮助您,我们需要澄清您试图通过一些示例实现什么(最终效果是什么),而不是试图将您的代码概念与其他东西(X-Y问题)相适应。您不理解问题的哪一部分?它不需要一个例子,但我给出了一个。(已删除链接)在Word宏中使用VB正则表达式时,如何保留粗体、斜体等。您应该阅读Cindy的评论:在Word文档内容上运行正则表达式时,如果结果中需要除纯字符串以外的任何内容,则正则表达式都没有用处。你不明白其中的哪一部分?很抱歉,由于下一个y,它没有运行,并且由于某些原因,你额外增加了4美元。但即使修复了这个问题,它也没有像我发布的示例中那样用连字符替换逗号。我现在已经修复了复制粘贴错误。过一会儿我再来看看。