wordvba使用正则 (wordvba的正则表达式)

如要将一个Word文档内的两个汉字中间的空格替换掉(之所以要特定要求两个汉字中间,是为了避免文本中的英文空格替换掉),可以使用查找、替换的通配符。

vbaword正则表达式详解,wordvba使用正则

查找:([一-﨩])( )([一-﨩])

替换:\1\3

写成VBA代码:

Sub 替换()
With Selection.Find
 .Text = "([一-﨩])( )([一-﨩])"
 .Replacement.Text = "\1\3"
 .Forward = True
 .Wrap = wdFindContinue
 .Format = False
 .MatchCase = False
 .MatchWholeWord = False
 .MatchByte = False
 .MatchAllWordForms = False
 .MatchSoundsLike = False
 .MatchWildcards = True
 End With
 Selection.Find.Execute Replace:=wdReplaceAll
End Sub

如果使用正则的选择、查找、替换,则会有副作用,因为要先选择,会将其中的文本格式、图片都替换掉。

Sub replacetxt222()
 Dim regex As Object
 Dim regMatch As Object
 Set regex = CreateObject("VBScript.RegExp")
 Dim str As String
 str = Selection.Text
 With regex
 .Pattern = "([一-﨩])( )([一-﨩])"
 .MultiLine = True
 .Global = True
 .IgnoreCase = True
 str = .Replace(str, "$1$3")
 Debug.Print (str)
 End With
 Selection.Text = str
End Sub

当然也可以将中文中的半角标点替换为全角:

vbaword正则表达式详解,wordvba使用正则

([一-﨩])(,)([一-﨩])

\1,\3

通配符的一般规则为:

vbaword正则表达式详解,wordvba使用正则

如(<*>) (<*>)就可以分组匹配两个单词,中间有空格。

另外,\d在正则中表示数字,而在查找、替换对话框中是没有这一写法的,可以用以下表达式表示:

[0-9]{1,2}

表示匹配一个或两个数字。

需要注意的是,VBA的正则表达式与查找对话框中的通配符的写法与支持的功能是有所区别的。

查找、替换对话框中不使用通配符时,可用^#来表示数字,其“特殊格式”的弹出菜单为:

vbaword正则表达式详解,wordvba使用正则

如段落标记^p,通配符中用^13表示。

查找、替换对话框中使用通配符时,其“特殊格式”的弹出菜单为:

vbaword正则表达式详解,wordvba使用正则

一些常用的特殊格式的通配符写法可以从以上弹出菜单中得到帮助。

-End-