代码之家  ›  专栏  ›  技术社区  ›  Zac

查找并突出显示Word文档中的非拉丁代码页字符

  •  1
  • Zac  · 技术社区  · 7 年前

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

    我想做的是在MS Word文档中查找非拉丁语代码页字符并突出显示它们。我认为最好的方法是使用 正则表达式

    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:

    字符(即非英语字符 异常一旦我有了搜索非字母数字的主模式

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

    1 回复  |  直到 7 年前
        1
  •  2
  •   Cindy Meister    7 年前

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

    通过使用提供的示例文本进行测试,此搜索字符串可以工作: [!^011-^0126] . 这搜索任何东西 126 ,作为文字字符。

    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