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

时间:2018-11-27 09:27:53

标签: regex vba ms-word

我在网上寻找了这个,但不幸的是没有喜悦。我可以找到很多使用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

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

P.S。我正在Windows 7(64位)和Word 2013上工作

更新1:
以下是示例文本:

  

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

因此,在上面的示例文本中,应突出显示À(我的文本中确实有其他字符,但是很遗憾,这些字符未显示在网站上)

1 个答案:

答案 0 :(得分:2)

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

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

使用提供的示例文本进行测试,此搜索字符串有效:[!^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