VB 正则匹配中的括号

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})Q\1"    ->  A3A3QA3A3

引用第4组括号中内容(B4)
.Pattern = "((A3){2})((B4){2})Q\4"    -> A3A3B4B4QB4

3、预测查找(?=字符)和负预测查找(?!字符)

预测查找原则:先进行搜索等号后的字符在待匹配项中的位置。找到匹配项后按照给定规则先在匹配文本之前查找内容,查找到后输出,若括号(?=字符)后还有相应满足规则也会进行匹配。

需注意的是匹配是不包括预查找定位到的字符的。除非在之后定义相关的规则如加.

.Pattern = "^(?=.*\d).{4,8}$"
表示匹配4~8个任意字符,最少4个最多8个,待匹配的字符必须在此范围内超过,或下于均匹配不到

.Pattern = "\d+(?=元)."  匹配任意个数字后面跟1个字符(除了\n之外的)

 

负预测查找:查找的是除了该字符外的其他字符

 .Pattern = "(?!中国).*"   匹配不是中国的其他字符,中国在一起会从国字依次往后查找匹配
 .Pattern = "^(?!中国).*" 匹配开头不是中国的其他字符

sr = "中国建筑集团公司"  
第一种情况匹配出  “国建筑集团公司”
第二种情况匹配出 空

  

 

posted @ 2019-10-18 22:58  Jude_h  阅读(1410)  评论(0编辑  收藏  举报