Excel VBA(06)正则表达式

本文介绍了Excel VBA如何实现正则表达式的支持和基本用法,包括正则对象的创建、匹配规则的设置、特殊符号的含义等。通过示例代码展示了如何进行字符串匹配、替换以及边界条件的设定,对于处理复杂文本数据提供了实用的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概述

一、正则支持

  • 正则的概念就不说了,就是用特殊的字符串进行字符串的匹配
  • vba 本身是不支持正则的,需要引入外部的支持
    在这里插入图片描述

二、基本用法

1、示例代码

Sub text()
    Dim reg As New RegExp
    sr = "ABCA"
    Dim ret
    With reg
        .Global = True
        .Pattern = "A"
        .MultiLine = True
        Set ret = .Execute(sr)
    End With
    For Each r In ret
        Debug.Print r
    Next r
End Sub

2、细节说明

  • 创建正则对象还可以通过createObject("vbscript.regexp")
  • Global 属性代表是否进行全局匹配,false 的话就返回匹配的第一个,true的话会搜索全部的字符
  • multiline是设置是否进行多行的匹配,存在换行符的时候可以使用
  • Pattern 是最核心的设置我们的匹配的规则
  • ignoreCase属性可以设置是否区分大小写
  • 最后的Execute 方法可以返回匹配的结果集合,结果集包含的信息包括firstIndex、length、value
  • 如果采用 test方法的话返回的就是true 或者false
  • 结果集可以使用for 进行遍历输出

特殊符号

一、\

  • 换行符、制表符等中使用:\r \n \t
  • 用来转义使用:\$ \.
  • 特殊意义符号使用,大写的时候表示非
\d--匹配数字
\w--匹配数字或字母
\s--匹配空格、制表符等

二、.

  • 匹配除换行符以外的任意字符

三、+ * ?

  • 代表出现0次或者1次
  • * 代表0、1、无数
  • + 代表至少一次

四、{}

  • {n}
  • {n,m}
  • {n,}

1、正则对象的replace(sr," ")方法是将匹配的内容进行置换,所以只有两个参数
2、.*匹配所有是贪婪模式,是尽可能多进行匹配.*?是比较合理的通用匹配方式

五、[]

  • 匹配一个:[ABC]
  • 非括号内容:[^a]
  • 范围匹配:[a-z]

六、()

  • 括号内的内容作为一个整体
  • \num 可以进行括号内容的引用,具体的后面的数字匹配的顺序是前后外内
Sub test()
    Dim reg As New RegExp
    Dim sr As String
    sr = "A2A2B4B4QB41133AA33"
    With reg
        .Global = True
        .MultiLine = True
        .Pattern = "((A2){2})((B4){2})Q\4"
        Debug.Print .Replace(sr, "")
    End With
End Sub
'output:1133AA33
  • (?=str) (?!str)都可以进行预搜索,特点就是仅仅进行判断,不会占用匹配的位置
Sub test()
    Dim reg As New RegExp
    Dim sr As String
    sr = "1005030元"
    Dim ret
    
    With reg
        .Global = True
        .Pattern = "(?=.*)\d+"
        '.Pattern = "\d+(?=元)"  
        Set ret = .Execute(sr)
    End With
    For Each r In ret
        Debug.Print r
    Next r
End Sub
Sub test()
    Dim reg As New RegExp
    Dim sr As String
    sr = "Aaaa9"
    Dim ret
    
    With reg
        .Global = True
        .Pattern = "^(?=.*\d).{4,8}$"
        Set ret = .Execute(sr)
    End With
    For Each r In ret
        Debug.Print r
    Next r
End Sub
  • ()|联合使用主要用来简化我们的书写:A\d+|B\d+(A|B)\d+效果相同

七、^ $

  • 就是首尾匹配

八、\b

  • 单词边界的匹配

九、|

  • 就是一个或者的逻辑:A\d+|B\d+(A|B)\d+效果相同, A|B\d+和前二者不同

十、\un

  • 就是unicode 的表示,n为4位16进制,主要的应用就是汉字的筛选
  • 汉字的 unicode 编码是4e009fa5

提取我们要的字符串的时候一般2种方法:要么直接匹配我们要的字符串,要么将我们不要的给剔除

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值