news 2026/7/1 20:28:25

【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/7/1 11:43:19

macOS窗口管理工具深度解析:从新手到专家的进阶指南

macOS窗口管理工具深度解析&#xff1a;从新手到专家的进阶指南 【免费下载链接】open-source-mac-os-apps serhii-londar/open-source-mac-os-apps: 是一个收集了众多开源 macOS 应用程序的仓库&#xff0c;这些应用程序涉及到各种领域&#xff0c;例如编程、生产力工具、游戏…

作者头像 李华
网站建设 2026/7/1 11:43:28

【AI工程化核心突破】:如何用Docker快速部署可扩展的智能Agent集群

第一章&#xff1a;智能 Agent 集群部署的挑战与演进随着分布式系统和人工智能技术的深度融合&#xff0c;智能 Agent 集群在边缘计算、自动驾驶协同、工业自动化等场景中扮演着关键角色。然而&#xff0c;其大规模部署面临诸多挑战&#xff0c;包括异构环境适配、动态负载均衡…

作者头像 李华
网站建设 2026/7/1 18:02:09

Shipit自动化部署工具终极指南:提升团队协作效率的完整解决方案

Shipit自动化部署工具终极指南&#xff1a;提升团队协作效率的完整解决方案 【免费下载链接】shipit Universal automation and deployment tool ⛵️ 项目地址: https://gitcode.com/gh_mirrors/sh/shipit 在当今快速迭代的软件开发环境中&#xff0c;高效的自动化部署…

作者头像 李华
网站建设 2026/7/1 18:07:15

计算机408考研冲刺阶段高效提分策略:从诊断到实战的全方位指南

考研计算机408科目在最后冲刺阶段如何实现分数突破&#xff1f;本文为你提供一套从问题诊断到实战演练的完整解决方案&#xff0c;帮助你在有限时间内最大化学习效果。 【免费下载链接】cs-408 计算机考研专业课程408相关的复习经验&#xff0c;资源和OneNote笔记 项目地址: …

作者头像 李华
网站建设 2026/7/1 11:43:26

BiliBili-UWP客户端:Windows系统专属B站应用全方位体验指南

还在为浏览器观看B站视频时卡顿、发热而烦恼吗&#xff1f;BiliBili-UWP客户端为Windows用户带来了全新的解决方案&#xff01;作为一款专为Windows平台打造的第三方B站应用&#xff0c;它不仅解决了浏览器性能瓶颈&#xff0c;更提供了专业级的视频播放和社区互动体验。&#…

作者头像 李华
网站建设 2026/7/1 20:18:14

融资路演卡壳、招商宣讲没人买单、危机发生越解释越糟,这3个时刻让你慌了手脚?闯不过就只能停步

你有没有经历过这样的时刻&#xff1f;站在投资人面前&#xff0c;精心准备的PPT翻到一半&#xff0c;对方已经开始低头看手机。面对一群潜在的代理商&#xff0c;热情洋溢地讲完你的商业模式&#xff0c;换来的却是礼貌而冷漠的掌声。公司突遭舆论危机&#xff0c;你连夜写好声…

作者头像 李华