VBA 中正则表达式使用指南

1. 正则表达式基础用法

1.1 引入正则表达式

  • 前期绑定 :工具 → 引用 → Microsoft VBScript Regular Expressions 5.5

    vba 复制代码
    Dim regex As New RegExp
  • 后期绑定

    vba 复制代码
    Set regex = CreateObject("VBScript.RegExp")

1.2 常用属性设置

vba 复制代码
regex.Global = True  ' 全局搜索(默认False,只匹配第一个)
regex.Pattern = "表达式内容"  ' 设置正则表达式
regex.IgnoreCase = True  ' 忽略大小写(默认False)

1.3 基本操作方法

vba 复制代码
Set k = regex.Execute(目标字符串)  ' 执行匹配,返回MatchCollection对象
n = regex.Replace(目标字符串, 替换字符串)  ' 替换操作

1.4 With语句简化

vba 复制代码
With regex
    .Global = True
    .Pattern = "正则表达式"
    .Replace "", ""
    .Execute 目标字符串
End With

2. 正则表达式元字符

元字符 说明
\d 匹配数字
. 匹配除换行符外的任意字符
? 匹配前导字符0次或1次
+ 匹配前导字符1次或多次
* 匹配前导字符0次或多次
{n,m} 匹配前导字符n到m次
() 分组捕获
[] 字符集合
` `

3. 高级技巧

3.1 分组与引用

vba 复制代码
.Pattern = "(\d{4})-(\d{2})-(\d{2})"  ' 分组匹配日期
' 使用$1,$2,$3引用分组

3.2 非捕获分组

vba 复制代码
.Pattern = "(?:\d{4})"  ' 使用?:表示非捕获分组

3.3 Test方法

vba 复制代码
If regex.Test(目标字符串) Then
    ' 匹配成功执行的代码
End If

3.4 SubMatches用法(捕获分组值)

vba 复制代码
Sub 捕获分组值()
    Set regx = CreateObject("VBScript.RegExp")
    With regx
        .Global = True
        .Pattern = "(\w{3,}) (\d+)"
        Set mat = .Execute([A1])
        For Each m In mat
            n = n + 1
            Cells(n + 1, 3) = .Replace(m.Value, "$1")  ' 第一分组
            Cells(n + 1, 4) = .Replace(m.Value, "$2")  ' 第二分组
        Next
    End With
End Sub

4. 常用正则表达式示例

  1. 整数匹配

    • 正整数:^[0-9]*[1-9][0-9]*$
    • 整数:^-?\d+$
  2. 浮点数匹配

    • 正浮点数:^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$
  3. 邮箱匹配

    • ^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$
  4. URL匹配

    • ^[a-zA-z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$
  5. 中文匹配

    • [\u4e00-\u9fa5]
  6. 电话号码

    • ^(\d{3,4}-)?\d{7,8}$
  7. IP地址

    • ^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$
  8. 日期匹配

    • ^\d{4}-\d{1,2}-\d{1,2}$

5. 实用示例代码

5.1 首尾锚定示例

vba 复制代码
Sub test()
    Set regx = CreateObject("VBScript.RegExp")
    With regx
        .Global = True
        .Pattern = "^[A-Z]+\d+$"
        For Each Rng In [A1:A17]
            Set mat = .Execute(Rng)
            For Each m In mat
                n = n + 1
                Cells(n, 2) = m
            Next
        Next
    End With
End Sub

5.2 循环正则表达式

vba 复制代码
' 将正则表达式放到数组中循环
Dim patterns(2)
patterns(0) = "\d+"
patterns(1) = "[A-Z]+"
patterns(2) = "[\u4e00-\u9fa5]+"

For Each p In patterns
    regex.Pattern = p
    ' 执行匹配操作
Next

以上内容总结了VBA中使用正则表达式的主要知识点和实用技巧,可作为日常开发参考。

相关推荐
Quincy_Freak9 分钟前
银河麒麟 SQLite 实操:Excel 导入与 SQL 语法编辑功能详解摘要
数据库·arm·数据库管理·大数据分析·银河麒麟·aarch64·sqlitego
万亿少女的梦16817 分钟前
基于Node.js和Express的旅游信息管理平台设计与开发
mysql·node.js·express·系统设计·旅游信息管理
Dovis(誓平步青云)23 分钟前
《C/C+++ Boost 轻量级搜索引擎实战:架构流程、技术栈与工程落地指南——HTML文件的清洗(上篇)》
开发语言·数据库·c++·搜索引擎·开源
蚁库2 小时前
Oracle 12c + ASM + UDEV 实战教程:从磁盘规划到日常管理,10节视频完整通关
数据库·oracle
xurime10 小时前
Excelize 开源十周年,发布 2.11.0 版本
golang·开源·github·excel·导出·导入·excelize·基础库
云和恩墨11 小时前
数据库一体机简史:从ODA到zData X,命名之中的玄机
数据库·vr
万亿少女的梦16811 小时前
基于Python的高考志愿填报辅助系统设计与实现
java·spring boot·python·mysql·vue
万亿少女的梦16811 小时前
基于SpringBoot与Vue的历史博物馆展品展示与游客管理系统设计
spring boot·mysql·vue·系统设计·博物馆管理系统
数据库小学妹12 小时前
KES是什么?国产数据库技术架构、核心能力与选型实战解析
数据库·经验分享·架构·国产数据库·数据库选型·信创数据库
Database_Cool_13 小时前
向量检索加速首选:阿里云 Tair 内置向量能力毫秒级召回
数据库·阿里云