我在网上寻找了这个,但不幸的是没有喜悦。我可以找到很多使用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”)或冒号(“:”)或连字符(“-”)。但我可以添加这些 一旦有了主要模式即可搜索非字母数字 字符
因此,在上面的示例文本中,应突出显示À(我的文本中确实有其他字符,但是很遗憾,这些字符未显示在网站上)
答案 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