news 2026/5/19 21:30:11

【Excel VBA 编程】第59讲:VBA正则的隐形助手——非捕获组(?:)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【Excel VBA 编程】第59讲:VBA正则的隐形助手——非捕获组(?:)

上一期讲到了捕获组,它尽职尽责地找到我们关心的文本模式,并将其分门别类地记录到 SubMatches 集合中。然而,当匹配逻辑变得复杂时,这位“助手”过于细致的记录有时反而会成为一种负担

什么是非捕获组

为了卸下负担,解决“只需分组、无需捕获”的需求,非捕获组应运而生

VBA正则表达式中的非捕获组是一个非常实用的分组工具,可以帮助我们优化表达式结构并提升匹配效率,其语法为:

(?:Expression)

其中 Expression 是要进行分组的正则表达式,通过预定义字符、字符类、量词等组合而成

当我们需要使用圆括号 () 来对表达式进行分组,但又不希望这个分组被单独捕获出来作为结果的一部分时,可考虑使用非捕获组。这可以避免产生不必要的子匹配项,使结果更清晰

非捕获组 VS 捕获组

为了直观理解非捕获组和捕获组的区别,我们来看两段代码

以下示例代码需求:从文本中提取日期信息,并分别输出完整的日期以及年、月、日三个部分,这里需要用到捕获组

Dim match' 创建正则表达式对象With CreateObject("VBScript.RegExp").Global = True ' 搜索全部匹配项.IgnoreCase = False ' 区分大小写.Pattern = "(\d{4})-(\d{2})-(\d{2})"For Each match In .Execute("合同签订时间:2025-09-17,生效日:2025-10-15")Debug.Print matchDebug.Print match.SubMatches(0)Debug.Print match.SubMatches(1)Debug.Print match.SubMatches(2)NextEnd With

代码的核心是要搜索的模式:\d{4} 匹配4位数字(年),\d{2} 匹配2位数字(月或日),因此执行后结果:

从图中可以看出,SubMatches中已经分别提取到了年、月和日这三个部分

然而有些场景我们可能只关心月和日两个分组数据,此时SubMatches就不需要存储年份相关的分组内容,因此代码修改为:

Dim match' 创建正则表达式对象With CreateObject("VBScript.RegExp").Global = True ' 搜索全部匹配项.IgnoreCase = False ' 区分大小写.Pattern = "(?:\d{4})-(\d{2})-(\d{2})"For Each match In .Execute("合同签订时间:2025-09-17,生效日:2025-10-15")Debug.Print matchDebug.Print match.SubMatches(0)Debug.Print match.SubMatches(1)NextEnd With

匹配模式中(?:\d{4})即为非捕获组,就是在捕获组基础上增加问号和冒号这两个符号,它的作用是匹配但不捕获年份,因此实际只有两个捕获组:

  • match.SubMatches(0)存放月,如"09"

  • match.SubMatches(1)存放日,如"17"

这样处理之后,SubMatches结果中保留的均为目标数据,有效排除了非必要分组信息的干扰

总之,将不需要引用的分组改为非捕获组是一个良好的编程习惯,使代码逻辑变得清晰,避免分组编号混乱。另外,在非常复杂的正则表达式中,将不需要引用的普通捕获组 () 改为非捕获组 (?:),还能带来性能提升

结束语

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

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

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

LobeChat是否支持OAuth登录?第三方鉴权集成进展

LobeChat是否支持OAuth登录?第三方鉴权集成进展 在构建现代AI对话系统时,身份认证早已不再是“有无”的问题,而是“如何做得更安全、更灵活、更贴近组织架构”的工程挑战。随着LobeChat这类开源聊天界面逐渐被用于团队协作和企业内部助手场景…

作者头像 李华
网站建设 2026/5/16 17:07:11

如何在笔记本上运行50量子比特模拟?:不为人知的内存压缩黑科技

第一章:量子计算的模拟量子计算的模拟是研究和开发量子算法的重要手段。由于当前真实量子计算机仍处于发展阶段,资源有限且易受噪声干扰,科研人员广泛依赖经典计算机来模拟量子系统的行为。通过构建量子态的数学模型,并在经典硬件…

作者头像 李华
网站建设 2026/5/11 17:46:55

揭秘低代码平台事件绑定难题:3步实现无缝交互逻辑

第一章:低代码组件的事件在低代码平台中,组件事件是实现交互逻辑的核心机制。通过监听用户操作或系统行为触发的事件,开发者可以快速构建动态响应的界面,而无需编写大量底层代码。事件的基本概念 事件是组件在特定条件下发出的信号…

作者头像 李华
网站建设 2026/5/11 11:14:17

别再盲目聚类了!空间转录组R语言最优算法选择指南

第一章:空间转录组细胞聚类的核心挑战空间转录组技术结合了基因表达谱与组织空间位置信息,为解析组织微环境提供了前所未有的视角。然而,在对空间转录组数据进行细胞聚类时,研究者面临多个核心挑战,这些挑战直接影响聚…

作者头像 李华
网站建设 2026/5/18 14:24:51

太月香学新书《中国传统香学》首发亮相

12月11日,第12届全球外交官中国文化之夜在京举办。该活动由上午的“全球品牌发展暨中国品牌出海论坛”及晚上的“中国文化之夜”组成。活动旨在促进各国驻华外交官、文化学者及企业精英间的文化交流与合作,推动文明互鉴与民心相通。 在“全球品牌发展暨…

作者头像 李华
网站建设 2026/5/19 18:30:54

2025冬暖影展奔赴广州,以光影开启时空对话

本周,全国艺联2025“艺术新作冬暖主题影展”携十部尚未公映的国产艺术佳作翩然落地广州。12月9日至11日,《爷爷奶奶那些事》、《燃比娃》、《长夜将尽》三部展映影片的主创团队惊喜现身映后交流环节,与羊城观众共同开启跨越时空的真挚对话&am…

作者头像 李华