四时宝库

程序员的知识宝库

学习VBA,报表做到飞 第四章 正则表达式 4.9 后向引用

第四章 正则表达式

4.9 后向引用

正则表达式有括号()分组时,如果在分组匹配内容的后面,再匹配相同内容,可以用\1或者\n代表引用第一个括号内的内容或第n个括号内的内容,这就是后向引用。

说白了,也就是在一个字符串里找到两个相同的内容。如:

VBA是Visual Basic For Application的简称,是一种内置在Excel中的编程语言,可以用来编写程序代码,实现一些Excel本身所不具备的功能。

我们在这句话里匹配两个“Excel”,用正则表达式"([A-Z][a-z]+).+\1",把需要匹配两次的内容用小括号括起来,中间部分用.+表示,后面的\1表示再次匹配前面小括号里的内容,就会匹配到如下结果:

匹配到一个记录“Excel中的编程语言,可以用来编写程序代码,实现一些Excel”,其中有一个匹配组“Excel”。

如果前面有两个小括号,也就是说有两个分组匹配,我们想匹配第二个小括号里的内容,这时就用\2表示,依次类推。

用后向引用来查找字符串中的重复内容最方便,下面我们通过一个案例来说明它的用法。

小程序:

把下面句子里的重复词语用红色标注出来。

VBAVBA是Visual Basic For Application的简称,是一种内置在ExcelExcel中的编程语言,可以用来编写编写程序代码,实现一些一些Excel本身所不具备的功能。

Sub 后向引用()

Dim reg As New RegExp

With reg

.Global = True

.Pattern = "(.{2,})\1"

Set 结果 = .Execute([a1])

For Each ss In 结果

起点 = ss.FirstIndex + 1

长度 = ss.Length

Range("a1").Characters(起点, 长度).Font.Color = 255

Next

End With

End Sub

在这个程序里,我们用正则表达式"(.{2,})\1"来匹配两个以上的字符串,且紧接着有相同内容的部分,就会找到重复词语。用正则表达式测试工具匹配的结果是:

匹配到4个记录,分别是“VBAVBA”、“ExcelExcel”、“编写编写”、“一些一些”,每一个匹配记录下都有一个匹配组,分别是“VBA”、“Excel”、“编写”、“一些”。

程序运行结果如下:

或者直接把重复部分去掉:

Sub 后向引用()

Dim reg As New RegExp

With reg

.Global = True

.Pattern = "(.{2,})\1"

[a1] = .replace([a1], "$1")

End With

End Sub

在Replace方法里,如果是分组匹配,可以用$1表示第一个匹配组,$2表示第二个匹配组,依此类推。如:

.replace(字符串, "$1") 把匹配结果用第一个匹配组代替。本案例就是用第一个匹配组把匹配到的内容替换掉。运行结果如下:


往期精彩回顾:

学习VBA,报表做到飞 第四章 正则表达式 4.8 分组匹配

学习VBA,报表做到飞 第四章 正则表达式 4.7 首尾匹配

学习VBA,报表做到飞 第四章 正则表达式 4.6 排除匹配


我是云飞扬,职场财会人员,愿与大家分享表格制作和数据统计分析的技巧与方法,希望大家的工作更便捷,更轻松!

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接