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})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 = "中国建筑集团公司"  
第一种情况匹配出  “国建筑集团公司”
第二种情况匹配出 空

  

原文地址:https://www.cnblogs.com/hqczsh/p/11698119.html