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

      

  • 相关阅读:
    HDU 1394Minimum Inversion Number 数状数组 逆序对数量和
    2016中国大学生程序设计竞赛(长春)-重现赛 1010Ugly Problem 回文数 模拟
    Codeforces 723C. Polycarp at the Radio 模拟
    hihoCode 1078 : 线段树的区间修改
    hihocode 1077 : RMQ问题再临-线段树
    POJ 2352Stars 树状数组
    Codeforces 714C. Sonya and Queries Tire树
    Codeforces 710C. Magic Odd Square n阶幻方
    Codeforces 709C 模拟
    ICM Technex 2017 and Codeforces Round #400 (Div. 1 + Div. 2, combined) D. The Door Problem 2-SAT
  • 原文地址:https://www.cnblogs.com/hqczsh/p/11698119.html
Copyright © 2011-2022 走看看