zoukankan      html  css  js  c++  java
  • 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 = "中国建筑集团公司"  
    第一种情况匹配出  “国建筑集团公司”
    第二种情况匹配出 空
    

      

  • 相关阅读:
    ES6获取页面所有页面标签名
    改变this对象的指向
    构造函数及原型
    全局对象this转为局部对象
    节点注意的问题
    Spark研究笔记17:设置 CVT
    Spark研究笔记15:资源 CVT
    Spark研究笔记13:Swing 组件类 CVT
    Spark研究笔记16:搜索 CVT
    Spark研究笔记19:插件体系开发 CVT
  • 原文地址:https://www.cnblogs.com/hqczsh/p/11698119.html
Copyright © 2011-2022 走看看