1.正则表达式失灵(excel2016)
案列:提取一段字符串中数字并求和
Function sumnum(x) Dim regexp As Object Set reg = CreateObject("VBAScript.RegExp") 'Dim reg As New regexp Dim s, n, m With reg .Global = True .Pattern = "d*.?d*" Set n = .Execute(x) For Each m In n s = s + Val(m) Next m End With sumnum = s End Function
采用代码引用正则的方式貌似好像出现错误值结果。解决方式是选用VBA引用法,在工具里面勾选引用正则,在采用new的方式创建,结果正确。
错误结果:
2、正则匹配中括号注意点
()数字 :不可省略,后面数字表示引用前面的第几组括号,引用顺序是先前后后,先外后里。
(())(())3 下面第3组括号 1 2 3 4
案列:
引用第一组括号中内容((A3){2}) .Pattern = "((A3){2})Q1" -> A3A3QA3A3 引用第4组括号中内容(B4) .Pattern = "((A3){2})((B4){2})Q4" -> A3A3B4B4QB4
3、预测查找(?=字符)和负预测查找(?!字符)
预测查找原则:先进行搜索等号后的字符在待匹配项中的位置。找到匹配项后按照给定规则先在匹配文本之前查找内容,查找到后输出,若括号(?=字符)后还有相应满足规则也会进行匹配。
需注意的是匹配是不包括预查找定位到的字符的。除非在之后定义相关的规则如加.
.Pattern = "^(?=.*d).{4,8}$" 表示匹配4~8个任意字符,最少4个最多8个,待匹配的字符必须在此范围内超过,或下于均匹配不到 .Pattern = "d+(?=元)." 匹配任意个数字后面跟1个字符(除了 之外的)
负预测查找:查找的是除了该字符外的其他字符
.Pattern = "(?!中国).*" 匹配不是中国的其他字符,中国在一起会从国字依次往后查找匹配 .Pattern = "^(?!中国).*" 匹配开头不是中国的其他字符 sr = "中国建筑集团公司" 第一种情况匹配出 “国建筑集团公司” 第二种情况匹配出 空