众所周知,单词的查找和替换“通配符”功能受到一些严重的限制。
以下代码在 word 文档中实现了真正的正则表达式查找和替换,在其他 Stackoverflow 和 SuperUser 问题中可以找到它的变体。
Sub RegEx_PlainText(Before As String, After As String)
Dim regexp As Object
Set regexp = CreateObject("vbscript.regexp")
With regexp
.Pattern = Before
.IgnoreCase = True
.Global = True
'could be any Range , .Range.Text , or selection object
ActiveDocument.Range = .Replace(ActiveDocument.Range, After)
End With
End Sub
Run Code Online (Sandbox Code Playgroud)
但是,这会擦除所有格式的文档。
即使字符串的长度相同或实际上是相同的字符串,Word 也不会逐个字符地保留格式,因此ActiveDocument.Range = ActiveDocument.RangeorSelection.Text=Selection.Text将擦除所有格式(或更准确地说,将整个范围的格式设置为与范围中的第一个字符相同,并添加回车)。仔细想想,这种行为并不令人惊讶。
为了解决这个问题,下面的代码运行一个正则表达式查找,然后遍历匹配项并.replace仅在找到匹配项的范围内运行。 这样,如果匹配本身具有多种格式(例如,斜体字会丢失),则只会丢失格式
希望代码注释使这非常透明。
Sub RegEx(Before As String, After As String, _
Optional CaseSensitive As Boolean = False, …Run Code Online (Sandbox Code Playgroud) for /f %%a in ('type "file.txt"^|find "" /v /c') do set /a count=%%a
Run Code Online (Sandbox Code Playgroud)
我在http://www.dostips.com/?t=Snippets.CountLines找到了这个命令
它似乎工作,但我无法弄清楚为什么.我不愿意使用我不理解的东西,除非它有特殊字符的错误等但我无法弄清楚它为何起作用.