• (十五)VBA常用基础知识:正则表达式的使用


    1. vba正则表达式的说明
    项目说明
    Pattern在这里写正则表达式,例:[\d]{2,4}
    IgnoreCase大小写区分,默认false:区分;true:不区分
    Globaltrue:全体检索;false:最小匹配
    Test类似perl正则前的m,匹配项目
    Replace类似perl正则前的s,替换项目
    Execute类似java的matcher,然后能取出里边的group1,group2,group3;或者perl里匹配的各个括号的值

    正则表达式怎么写,这里不做说明,我是做perl的时候看了那本骆驼书然后顿悟的,以前特别怕写正则,现在还挺喜欢写的,特别是用正则解决了问题后

    2.Test的用法

    Sub test()
        Dim RE  As String
        Dim patt As String
        Set RE = CreateObject("VBScript.RegExp")
        pattern = "[0-9]{2,4}"
        With RE
            .pattern = patt
            .IgnoreCase = True
            .Global = True
            If .test("word1234aa") Then
                Debug.Print "11111"
            Else
                Debug.Print "22222"
            End If
            If .test("word4aa") Then
                Debug.Print "33333"
            Else
                Debug.Print "44444"
            End If
        End With
        Set RE = Nothing
    End Sub
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    执行结果:
    在这里插入图片描述
    原因:没有引正则的包
    在这里插入图片描述
    很遗憾,macos vba无法使用正则,因为没有正则的引用
    在这里插入图片描述
    但是上边我写的正则匹配应该是没问题的

    3.Replace的用法

    Sub test()
        Dim RE As String
        Set RE = CreateObject("VBScript.RegExp")
        With RE
            .pattern = "[0-9]{2,4}"
            .IgnoreCase = False
            .Global = True
        End With
        Dim str As String, ret As String
        str = "I love you 123"
        ret = RE.Replace(str, "zy")
        Debug.Print ret
        Set RE = Nothing
        '输出结果:I love you zy
    End Sub
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    4.Execute的用法

    Sub test()
        Dim RE, patt As String, pmatch
        Set RE = CreateObject("VBScript.RegExp")
        patt = "I love ([\d]+) and ([\d]+)"
        With RE
            .pattern = patt
            .IgnoreCase = True
            .Global = True
             Set pmatch = .Execute("I love 123 and 456")
             If pmatch.Count > 0 Then
                Debug.Print pmatch(0) & "======" & pmatch(1)
             End If
        End With
        Set pmatch = Nothing
        Set RE = Nothing
    End Sub
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
  • 相关阅读:
    Axios传值的几种方式
    物联网的概念
    c++入门99题41-50
    找不到vcruntime140.dll,无法继续执行代码的详细解决方案
    为裁员做准备的7个有用步骤(简单)
    单/三相dq解耦控制与特定次谐波抑制
    !AndroidStudio中Gradle下载过慢引发的问题
    C++面试基础整理(私房菜)
    基于SpringBoot的体育馆场地赛事预约管理系统设计与实现(源码+lw+部署文档+讲解等)
    Nacos服务治理原理解析
  • 原文地址:https://blog.csdn.net/charles542307299/article/details/133749975