基本概念
正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),是计算机科学的一个概念。
功能
正则表达式具有强大的功能,能够从繁杂的文本中快速匹配目标字符串。
特点
灵活性高,功能强大;可以最简单的方式处理杂乱的字符串。
引用
正则表达式不是Excel VBA自带的,需要引用才可以调用正则表达式的资源。有两种引用方式(以VBA为例):一是前期绑定,从vba编辑界面“引用”中找到“Microsoft vbscipt regular expressions 5.5”以上版本并引用,同时在vba代码框中输入”dim reg as new regexp”;二是后期绑定,无需任何引用,在VBA代码框中输入“set reg=createObject(“vbscript.regexp”)”,即可使用。
后期绑定与前期绑定相比,后期绑定的vba代码移植性更好,前期绑定要求Excel必须引用“Microsoft vbscipt regular expressions 5.5”。
属性
(1)Global属性:选择true或者false,表示全局匹配还是非全局匹配;
(2)Pattern属性:匹配模式,内容为正则表达式;
(3)IgnoreCase属性:选择true或者false,表示不区分大小写或者区分大小写;
(4)Multiline属性:选择true或者false,表示开启或关闭多行搜索。
方法
(1)execute方法:.execute(字符串),根据正则表达式Pattern在文本中执行匹配动作,返回一个字符串结果集;
(2)Replace方法:. Replace(被替换的(匹配)字符串,新的字符串),和vba中的replace方法用法不同;如正则表达式. Replace(ss,””),将单元格ss中匹配的字符串替换为空值,而不是将ss所有内容替换为空值;
(3)Test方法:. Test(ss),如果单元格ss中含有匹配的字符,返回true,否则返回false。
Pattern语法结构
使用元字符和数字、字母等组成正则表达式。
元字符
(1)\d:匹配单个数字,等同于[0-9];
(2)\D:匹配单个数字以外的字符(包括字母、汉字、空格、下划线等各类符号),替代[a-zA-Z]。
(3)\[一-龢]:匹配单个汉字,等同于[\u4E00-\u9FA5];
(4)\w:匹配单个字母、汉字、数字和_;
(5)\W:匹配任何非单词字符(包括空格等各类符号,即匹配\w以外的符号);
(6)\s:匹配任何空白字符,如空格、制表符、换行符等不可见字符;
(7)\S:匹配任何非空字符(\s以外的内容)等可见字符;
(8)\n:匹配单个换行符;
(9)\r:匹配单个回车符;
(10)\t:匹配单个制表符;
(11).:匹配出\n以外的任何单个字符;
(12)\b:匹配一个字母和空格的位置(不支持汉字);
(13)\B:匹配非字母和空格的位置;
(14)*:匹配0次或者多次,等同于{0,};
(15)+:匹配1次或者多次,等同于{1,};
(16)?:出现在非量词后,表示匹配0次或者1次,等同于{0,1};放在量词”+””*”后面,表示懒惰模式,分开匹配;(?:xxx)非捕获分组,匹配符合xxx模式的内容,但不获取该内容;
(17){n,m}:匹配n次至m次,n<=m;
(18)^:放在正则表达式最前面时,表示匹配以^后的模式开始的字符串,如^\d+,匹配以数字开头的字符串;放在其他位置时[^xxx],表示不能匹配^后模式的字符串;
(19)$:匹配行尾,匹配以$前模式结束的字符串,如\d+$,匹配以数字结尾的字符串;
(20)\1:匹配前面内容在后面重复一次的。
零宽断言,匹配一个位置:
(21)(?=xxx):在xxx前面;
(22)(?!xxx):不在xxx前面;
注意:如果想表示其本身意思,加上“\”,表示转义。
使用技巧:除了将多个正则表达式合并使用外,还可以将多个表达式单独放入数组,循环使用。
延伸知识点
对执行execute()方法返回的结果集中,可使用以下字符串属性对结果集进行操作。
(1)匹配字符串的起点:匹配字符串.FirstIndex+1,字符串从0开始计数,所以需要加1;
(2)匹配字符串的长度:匹配字符串.length;
(3)标注颜色(以红色为例):单元格.characters(起点,长度).font.color=255。