小编Som*_*Guy的帖子

不破坏文档格式的正则表达式 Microsoft Word

众所周知,单词的查找和替换“通配符”功能受到一些严重的限制。

以下代码在 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)

regex vba ms-word

6
推荐指数
1
解决办法
1671
查看次数

为什么这个计算文本文件中行数的批处理命令有效?

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找到了这个命令

它似乎工作,但我无法弄清楚为什么.我不愿意使用我不理解的东西,除非它有特殊字符的错误等但我无法弄清楚它为何起作用.

batch-file

2
推荐指数
1
解决办法
149
查看次数

标签 统计

batch-file ×1

ms-word ×1

regex ×1

vba ×1