【问题标题】:Find and highlight non-Latin code-page characters in a Word document在 Word 文档中查找并突出显示非拉丁代码页字符
【发布时间】:2019-04-29 00:04:27
【问题描述】:

我在网上找过这个,但不幸的是没有快乐。我可以找到很多查找和替换的示例,但使用regex 查找和突出显示的例子不多。

我想做的是在 MS Word 文档中查找非拉丁代码页字符并突出显示它们。我认为最好的方法是使用regex(如果不是这种情况,欢迎提出建议)。下面的代码高亮了整个文档:

Sub Highlight_Words()
    Dim oRE As New RegExp: oRE.Pattern = "[^a-zA-Z0-9:]"
    Dim oM As Match

    Application.ScreenUpdating = False
    Options.DefaultHighlightColorIndex = wdRed
    With ActiveDocument.Content.Find
      .ClearFormatting
      .Text = oRE.Pattern
      '.Text = "[^a-zA-Z0-9\s:]"
      '.Text = "[a-zA-Z\d\s:]"
      '.Text = "  "
      With .Replacement
        .Text = "^&"
        .ClearFormatting
        .Highlight = True
      End With
      .Forward = True
      .Wrap = wdFindContinue
      .Format = True
      .MatchWildcards = True
      .Execute Replace:=wdReplaceAll
    End With
    Application.ScreenUpdating = True

End Sub

任何帮助将不胜感激,谢谢

附:我正在使用 Windows 7(64 位)和 Word 2013

更新1:
下面是一个示例文本:

这只是一个示例文本,用于测试突出显示非字母数字 字符(即不是英文字符的字符 (即À)而不是数字)。此规则有例外,例如 撇号(“2”)或冒号(“:”)或连字符(“-”)。但我可以添加这些 一旦我有了搜索非字母数字的主要模式,就会出现异常 字符

所以从上面的示例文本中,应该突出显示 À(我确实在文本中有其他字符,但不幸的是它们没有显示在网站上)

【问题讨论】:

    标签: regex vba ms-word


    【解决方案1】:

    您不能在 Word 文档中使用 RegEx; RegEx 只能在您从文档中提取的字符串上运行(分配给字符串变量)。但是文档中的位置和任何格式信息都会丢失。任何搜索都必须使用 Word 的内置通配符功能完成,该功能类似于 RegEx,但不一样,也不是“强大”。

    基本上,在给定“拉丁”代码页的情况下,要求似乎是通过 ANSI 126 的“标准”ANSI 代码中的任何内容。 (您可以使用 Word 的插入符号(Insert/Symbol, More Symbols)对话框查看字符及其代码。

    使用提供的示例文本进行测试,此搜索字符串有效:[!^011-^0126]。这将在 ANSI 11(Word 的换行符)到 ANSI 126(小写 z)的字符范围内搜索 not 的任何内容。可以在126 之后附加具有更高 ANSI 代码的其他字符,作为文字字符。

    放入问题中的代码:

    Sub Highlight_Words()
        Dim Pattern As String
    
        Pattern = "[!^011-^0126]"   
        Application.ScreenUpdating = False
        Options.DefaultHighlightColorIndex = wdRed
        With ActiveDocument.Content.Find
          .ClearFormatting
          .Text = Pattern
          With .Replacement
            .Text = "^&"
            .ClearFormatting
            .Highlight = True
          End With
          .Forward = True
          .Wrap = wdFindContinue
          .Format = True
          .MatchWildcards = True
          .Execute Replace:=wdReplaceAll
        End With
        Application.ScreenUpdating = True
    
    End Sub
    

    【讨论】:

      猜你喜欢
      • 2015-09-08
      • 2013-02-19
      • 1970-01-01
      • 2018-10-21
      • 1970-01-01
      • 2018-06-13
      • 2013-10-17
      • 2022-12-07
      • 2013-01-21
      相关资源
      最近更新 更多