news 2026/6/23 20:47:38

【Excel VBA 编程】第61讲:两种方法驾驭文本处理猛兽

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【Excel VBA 编程】第61讲:两种方法驾驭文本处理猛兽

VBA正则表达式中引入贪婪匹配与惰性匹配两种模式,本质上是为编程者提供控制匹配“粒度” 的关键工具。因此,理解并正确运用这两种模式,能够有效解决文本处理中常见的边界模糊问题,快速实现精准数据提取和文本分析

贪婪匹配

上一期我们提到的分组+量词组合使用,默认就是贪婪匹配。贪婪匹配的特点是倾向于获得最长的可能匹配子串

举个例子:从混合文本“<title>学习VBA</title><title>正则表达式</title>”中提取<title>和</title> 之间的所有内容,即“学习VBA”和“正则表达式”两处

以下是使用分组+量词的默认组合方式实现,看看能否实现诉求

Dim match' 创建正则表达式对象With CreateObject("VBScript.RegExp").Global = True ' 搜索全部匹配项.IgnoreCase = False ' 区分大小写.Pattern = "<title>(.*)</title>"For Each match In .Execute("<title>学习VBA</title><title>正则表达式</title>")Debug.Print match.SubMatches(0)NextEnd With

可惜,代码执行后的结果与预期存在差距

通过设置断点,再次执行,查看match变量,我们可以清晰看到获取的内容

这是因为模式匹配 <title>(.*)</title> 中,(.*) 使用了通配符 . 和量词 *。在默认情况下,量词 * 是贪婪的,这意味着它会尽可能多地匹配字符

当应用于字符串“ <title>学习VBA</title><title>正则表达式</title>” 时,正则引擎的匹配过程如下:

  • 首先找到第一个 <title>

  • 接着,(.*) 开始匹配。由于是贪婪模式,它会一直向后匹配,直到字符串的末尾

  • 然后,引擎开始回溯,尝试满足模式的后半部分 </title>。它会在字符串末尾找到最后一个 </title>,并成功完成一次匹配

虽然.Global = True,理论上会搜索所有匹配项,但在这个例子中,第一次贪婪匹配已经消耗了从第一个 <title> 到最后一个 </title> 之间的所有字符,没有剩余的文本可供第二次匹配,所以循环只会执行一次

最终,整个匹配结果:从第一个 <title> 开始,到最后一个 </title> 结束的最长可能字符串,即“ 学习VBA</title><title>正则表达式”。这就是 match.SubMatches(0) 获取到的内容,与代码执行后的结果一致

惰性匹配

既然通过贪婪匹配模式失败了,就要再次探讨寻求另一种方式——惰性匹配,也称为“非贪婪匹配”

贪婪量词后面追加一个问号 ? 即可启用惰性匹配,代码如下:

Dim match' 创建正则表达式对象With CreateObject("VBScript.RegExp").Global = True ' 搜索全部匹配项.IgnoreCase = False ' 区分大小写.Pattern = "<title>(.*?)</title>"For Each match In .Execute("<title>学习VBA</title><title>正则表达式</title>")Debug.Print match.SubMatches(0)NextEnd With

执行后结果:

在这种模式下,量词会尽可能少地匹配字符,一旦满足后续的匹配条件就立即停止,修改后,匹配过程变为:

  • 找到第一个 <title>

  • (.*?) 开始非贪婪匹配,它会在遇到第一个满足条件的 </title> 时就立即停止。因此,它只匹配了“学习VBA”。

  • 完成第一次匹配,得到 match.SubMatches(0) 为“学习VBA”

  • 由于设置了 .Global = True,正则引擎会从上次匹配结束的位置之后继续搜索

  • 找到第二个 <title>,(.*?) 匹配到其后的第一个 </title>,得到“正则表达式”

最后,循环结束,成功获得两个独立结果,是不是很有趣呢?

结束语

两段代码仅仅只差一个问号(?),结果却天差地别,这也仅仅才是正则表达式的一个语法。因此,很多小伙伴反馈正则表达式难学,大多数原因应该都在于这些细节上吧,毕竟一个符号决定胜负!

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

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

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

探索金领冠珍护源初的纯净世界:2025年健康奶粉新篇章

凌晨三点&#xff0c;看着小床上翻来覆去揉肚子的宝宝&#xff0c;我盯着奶粉罐上的成分表第N次叹气——胀气、便秘、最近还总爱抓耳朵……当妈后才懂&#xff0c;选奶粉哪是“随便买一罐”的事儿&#xff1f;每一个细微的消化不适、每一次免疫力“掉线”&#xff0c;都像一根针…

作者头像 李华
网站建设 2026/6/18 0:24:41

Solon 不依赖 Java EE 是其最有价值的设计!

Java 后端开发领域&#xff0c;Solon 作为一个后起之秀的微服务应用开发框架&#xff0c;正以其轻量、快速、高度灵活的特性获得越来越多的关注。与 Spring/Spring Boot 等早期框架诞生于 Java EE&#xff08;现 Jakarta EE&#xff09;的生态背景不同&#xff0c;Solon 从一开…

作者头像 李华
网站建设 2026/6/22 15:07:55

MegSpot:专业级图片视频对比工具全方位使用指南

MegSpot&#xff1a;专业级图片视频对比工具全方位使用指南 【免费下载链接】MegSpot MegSpot是一款高效、专业、跨平台的图片&视频对比应用 项目地址: https://gitcode.com/gh_mirrors/me/MegSpot MegSpot是一款免费免登录、高效专业的跨平台图片视频对比应用&…

作者头像 李华
网站建设 2026/6/22 1:31:52

LaMa图像修复模型性能优化实战:从PyTorch到TensorRT的完整加速方案

LaMa图像修复模型性能优化实战&#xff1a;从PyTorch到TensorRT的完整加速方案 【免费下载链接】lama 项目地址: https://gitcode.com/gh_mirrors/lam/lama 还在为LaMa图像修复模型的推理速度而烦恼吗&#xff1f;&#x1f914; 每次处理高分辨率图像都要等待好几分钟&…

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

WAN2.2视频生成革命:如何用4步采样重新定义创作效率?

在AI视频生成技术日益成熟的当下&#xff0c;创作者们正面临着一个关键抉择&#xff1a;是追求极致的画面质量&#xff0c;还是拥抱高效的生成速度&#xff1f;WAN2.2-14B-Rapid-AllInOne的出现给出了一个全新的答案——通过创新的多模型融合架构&#xff0c;在保证专业级画质的…

作者头像 李华
网站建设 2026/6/22 21:54:48

终极Headscale配置指南:从零到精通

终极Headscale配置指南&#xff1a;从零到精通 【免费下载链接】headscale An open source, self-hosted implementation of the Tailscale control server 项目地址: https://gitcode.com/GitHub_Trending/he/headscale 你是否曾在Headscale配置过程中感到困惑&#xf…

作者头像 李华