news 2026/6/23 22:10:37

【Excel VBA 编程】第55讲:文本世界的万能钥匙——正则表达式Regex登场

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【Excel VBA 编程】第55讲:文本世界的万能钥匙——正则表达式Regex登场

用VBA处理文本时,如果对确定的字符序列进行精确操作(查找、截取、替换),使用字符串处理函数 (如 InStr, Mid, Replace)完全够用;但当规则变得复杂,使用字符串函数会导致代码冗长混乱时,正则表达式(Regular Expression)就该登场了

认识正则表达式

正则表达式是处理文本的利器,它通过一种特殊的字符串模式,让我们能高效地完成复杂的搜索、匹配和替换任务。举个简单的例子感受一下:

假如在一段文本中提取订单号,订单号由1个字母后跟7位数字组成共8位。如“订单号:A1234567,请处理”

如果使用字符串函数实现,其核心逻辑则是遍历字符串中的每个字符,循环中使用 Mid 截取字符,Asc/Chr 判断字符类别,并拼接出符合长度和格式要求的字符串,这代码量就小不了

但如果使用正则表达式,轻轻松松几行代码拿下

With CreateObject("VBScript.RegExp").Global = True ' 搜索全部匹配项.IgnoreCase = False ' 区分大小写.Pattern = "[A-Z]\d{7}"Debug.Print .Execute("订单号:A1234567,请处理")(0)End With

执行后,直接提取出订单号:

是不是很神奇?接下来就逐步来学习这种新的文本处理方式吧

正则基本语法

正则表达式可以说是一项“一次学习,一生受益”的强大技能。初看可能第一印象就是复杂,给人一种望而生畏的感觉。而一旦掌握核心概念并多加练习,就会让我们处理文本的能力获得质的飞跃

想要理解正则表达式,关键在于掌握其构建模式的“语法”(即Pattern),它主要由以下几类元素构成:

2.1 普通字符

普通字符很好理解,其作用就是匹配自身,如字母、数字。虽然看起来基础,但它们是构建复杂匹配模式的基石,因为复杂的匹配模式通常由普通字符和特殊字符共同构成

当我们需要查找或验证文本中是否包含特定、确切的字符序列时(如特定的产品代码、关键词、人名),直接使用这些普通字符作为模式是最简单可靠的方式

假如需要将部门列表中部门名称中的“门”字移除(“销售部门”改为“销售部”),这个时候就可直接使用普通字符"门"作为匹配模式,如

.Pattern = "门"

2.2 元字符

元字符是具有特殊功能的字符,是正则表达式的“关键字”,是构建匹配模式的核心,它们赋予了正则表达式强大的文本处理能力。例如上文代码中\d,含义是匹配一个数字字符,等价于 [0-9]。另外还有:

  • .匹配除换行符(\n、\r)外的任何单个字符

  • \D匹配一个非数字字符,等价于 [^0-9]

  • \w匹配字母、数字、下划线,等价于 [A-Za-z0-9_]

  • \W匹配非字母、数字、下划线的字符

  • \s匹配任何空白字符,包括空格、制表符、换页符等

  • \S匹配任何非空白字符

2.3 字符类

字符类是使用方括号 [] 定义一组字符,用于匹配该集合中的任意一个字符,匹配其中任意一个

例如:匹配所有元音字母(不区分大小写

.Pattern = "[aeiouAEIOU]"

再比如:匹配所有非数字字符

.Pattern = "[^0-9]"

2.4 量词

量词是控制其前面元素出现的次数,举例说明:

匹配连续出现至少2次的连字符 '-'

.Pattern = "-{2,}"

精确匹配连续出现11次的数字,如手机号码

.Pattern = "\d{11}"

2.5 边界匹配符

不匹配字符,而是匹配位置,比如字符串的开头、结尾,或者单词与非单词字符之间的边界,具体如下:

  • \b精确匹配单词而不是单词的一部分时极其有用

  • \B 匹配非单词边界,即两边同为单词字符或同为非单词字符的位置

  • $ 匹配字符串的结束位置。在多行模式下,也匹配每一行的结尾

  • ^ 匹配字符串的开始位置

例如要匹配的内容从开头到结尾都是数字

.Pattern = "^\d+$"

再比如只匹配单词 "red",不匹配 "redirect" 或 "bred"

.Pattern = "\bred\b"

2.6 捕获组

用 () 括起来的部分,用于提取或重复特定子串

例如:第一个(\d{4})捕获组匹配年份,第二个(\d{2})捕获组匹配月份

.Pattern = "(\d{4})-(\d{2})

了解了以上语法知识后,我们对正则有了初步的认知。回头再来看文章开始展示的代码,是不是就清晰多了?其中最关键的步骤就是下面这一行代码,它定义了一种匹配模式:1个字母后跟7位数字

.Pattern = "[A-Z]\d{7}"

因此就轻松找到了文本中的订单号

结束语

今天的分享就到这里了,咱们下期继续

公众号同时也在不间断地分享免费的编程案例,如果想学习更多的编程知识,无论是用来提升自动化办公效率还是想提升自我,都可以关注我的公众号“努力鸭是黑色的”,解锁更多的VBA技能

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/23 19:27:56

OBS教程:OBS实时字幕插件如何下载?直播字幕翻译怎么弄?

OBS教程:OBS实时字幕插件如何下载?直播字幕翻译怎么弄?直播实时翻译软件哪个好?OBS实时字幕插件官方下载地址 首先介绍一下OBS实时字幕插件支持哪些功能: 1、将主播所说的话显示为文字,逐字逐句实时显示字…

作者头像 李华
网站建设 2026/6/23 20:59:01

MagicTime: Time-Lapse Video Generation Models asMetamorphic Simulators论文精读(1)

T2V的最新进展在文本描述合成高质量的一般视频方面取得了显著成功,但是在T2V中有一个被忽视的问题:没有充分编码真实世界的物理知识,因此生成的视频往往运动会被限制,变化不佳。因此本文提出了一个变形延时视频生成模型&#xff0…

作者头像 李华
网站建设 2026/6/23 21:26:18

Laravel 13多模态表单处理:从入门到精通的6大实战场景,错过等于失业

第一章:Laravel 13多模态表单处理概述在现代Web应用开发中,表单不再局限于文本输入。Laravel 13 引入了对多模态数据的原生支持,允许开发者在一个请求中高效处理文本、文件、JSON结构体甚至流媒体数据。这一能力极大增强了表单处理的灵活性与…

作者头像 李华
网站建设 2026/6/23 19:29:44

读捍卫隐私03同步

1. 隐私预期1.1. expectation of privacy1.2. 隐私预期应该从传统的纸质信件时代扩展到数字时代1.3. 在美国,执法部门在没有得到收信人许可的情况下不能打开密封的实体信函1.4. 隐私预期是一种司法测试,用于确定美国宪法《第四修正案》声明的隐私保护是否…

作者头像 李华
网站建设 2026/6/23 19:31:16

[Android] B站第三方电视TVapp BV_0.3.10

[Android] 哔哩哔哩第三方电视TVapp BV_0.3.10 链接:https://pan.xunlei.com/s/VOgBfL5mtfupyqvldvMw5dWUA1?pwd45ud# b站官方的TV版使用体验颇受争议,因此许多用户更倾向于使用网上广受好评的第三方开发的TV版本(BBLL)。这款第…

作者头像 李华
网站建设 2026/6/23 21:29:12

【time-rs】 time-core crate 的 Cargo.toml 配置文件详解

概述 time-core 是 time-rs 项目的底层核心库,提供基础的时间算法和数据类型。这个配置文件体现了其作为"内部实现细节"的定位,设计上高度精简且专注于特定用途。 1. 包基本信息分析 包标识与定位 name "time-core" # 明…

作者头像 李华