regex - 在 Word 文档中查找并突出显示非拉丁代码页字符
问题描述
我在网上找过这个,但不幸的是没有快乐。我可以找到很多查找和替换的示例,但在 find 和 highlight with 上却不多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
任何帮助将不胜感激,谢谢
PS 我正在使用 Windows 7(64 位)和 Word 2013
Update1:
以下是示例文本:
这只是一个示例文本,用于测试非字母数字字符(即非英语字符(即À)和非数字的字符)的突出显示。此规则有一些例外,例如撇号(“2'”)或冒号(“:”)或连字符(“-”)。但是一旦我有了搜索非字母数字字符的主要模式,我就可以添加这些例外
因此,从上面的示例文本中,À应该被突出显示(我确实在文本中有其他字符,但不幸的是它们没有显示在网站上)
解决方案
您不能在 Word 文档中使用 RegEx;RegEx 只能在您从文档中提取的字符串上运行(分配给字符串变量)。但是文档中的位置和任何格式信息都会丢失。任何搜索都必须使用 Word 的内置通配符功能完成,该功能类似于 RegEx,但不一样,也不是“强大”。
基本上,在给定“拉丁”代码页的情况下,要求似乎是通过 ANSI 126 的“标准”ANSI 代码中的任何内容。(您可以使用 Word 的插入符号(Insert/Symbol, More Symbols)对话框查看字符及其代码。
使用提供的示例文本进行测试,此搜索字符串有效:[!^011-^0126]
. 这将搜索不在字符范围 ANSI 11(Word 的换行符)到 ANSI 126(小写 z)中的任何内容。可以在 之后附加具有更高 ANSI 代码的其他字符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
推荐阅读
- java - 如何根据特定名称对字符串[即文件名集]进行排序
- python - 如何在 python 中运行 Check ESA SciHub?
- python - 如何在python中将极形数组转换为笛卡尔形数组?
- mysql - 如何在mysql中用斜杠而不是破折号插入日期类型值?
- c++ - 如何隐藏在 Qt 应用程序中打开的 Windows 终端?
- python - 如何修复 django 中的数据库问题(postgresql)
- php - Laravel - 更新表中的多行
- linux - ffmpeg:队列输入在时间上向后错误
- android - 如何使用处理程序线程动态更新回收器视图中的文本视图
- multithreading - 为什么这段代码没有达到竞争条件?