VBA之正则表达式(6)
实例需求:数据保存在A列中,需要对其中音标部分进行下划线标注,如C列所示,匹配这样的非典型字符,正则表达式是最佳选择。
示例代码如下。
Sub RegExpDemo()
Dim strTxt As String
Dim objRegEx As Object, objMatch As Object
Dim objMH As Object, c As Range
Set objRegEx = CreateObject("vbscript.regexp")
objRegEx.Pattern = "(\/.+?\/)"
objRegEx.Global = True
Columns(1).Font.Underline = xlUnderlineStyleNone
For Each c In Range([A4], Cells(Rows.Count, "A").End(xlUp))
strTxt = c.Value
Set objMatch = objRegEx.Execute(strTxt)
If objMatch.Count > 0 Then
For Each objMH In objMatch
strKey = objMH.submatches(0)
istart = objMH.firstindex + 1
c.Characters(istart, Len(strKey)).Font.Underline = xlUnderlineStyleSingle
Next
End If
Next
Set objMH = Nothing
Set objMatch = Nothing
Set objRegEx = Nothing
End Sub
【代码解析】
第5行代码使用后期绑定创建正则对象。
第6行代码指定正则匹配字符串,用于匹配音标部分,即两个“/”之间的部分,音标字符部分使用“.+?”非贪婪匹配模式。
第7行代码设置为全局搜索模式。
第8行代码清除第1列的下划线。
第9行代码第19行代码循环处理工作表中的数据。
第11行代码执行正则匹配,并将替换后的结果写入工作表中。
如果匹配成功,那么第13行到第17行代码使用For循环结构设置字符格式。
第14行代码获取匹配字符。
第15行代码获取匹配字符的位置,firstindex
是从零开始编号的,所以需要加一。
第16行代码设置音标部分的下划线格式。
第20行到第22行代码释放系统资源。
赞 (0)