当前位置: 首页 > news >正文

【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技能

http://www.cnnetsun.cn/news/9698.html

相关文章:

  • OBS教程:OBS实时字幕插件如何下载?直播字幕翻译怎么弄?
  • MagicTime: Time-Lapse Video Generation Models asMetamorphic Simulators论文精读(1)
  • Laravel 13多模态表单处理:从入门到精通的6大实战场景,错过等于失业
  • 读捍卫隐私03同步
  • [Android] B站第三方电视TVapp BV_0.3.10
  • 【time-rs】 time-core crate 的 Cargo.toml 配置文件详解
  • 政府网站与政务新媒体考核指标有什么区别
  • FLUX.1 Kontext终极指南:重新定义AI图像编辑的边界
  • Java新手必看:System类为什么会出现安全警告?
  • 基于springboot的大学生实习就业管理系统
  • AXI-A7.4.1 Overview
  • V型翅片与六边形蜂窝翅片的散热性能差异
  • 以太网温湿度传感器五重告警方式如何协同工作?
  • COMSOL介电金属多层膜结构宽谱吸收器:文献复现与吸收特性研究
  • 【必看收藏】LangChain生态实战:LangGraph+LangSmith构建可追踪AI智能体全流程解析
  • 使用DeepSeek开发第一个RAG
  • Jetson Secure Boot 完整实战指南:从 Fuse Key → Boot Chain → 验签代码路径的源码级解析
  • 【LeetCode30_滑动窗口 + 哈希表】:三招搞定“串联所有单词的子串”
  • 以全栈AI能力重塑智能客服服务效能
  • 如何在PHP项目中嵌入Rust代码?5步实现毫秒级响应的高性能服务集成
  • 英伟达推出云端算力集群监管工具,自证GPU无后门
  • 如何用智能配色工具3步打造品牌视觉一致性
  • 【OD刷题笔记】- 分苹果
  • MCP SC-400从入门到精通,构建抗量子攻击防线的关键路径
  • Bigemap Pro水文分析三大核心功能详解:从DEM到精准河网提取
  • Java学习日志--常见类库(上)
  • 直播带货APP开发的核心流程:推流端、观看端与运营端后台搭建指南
  • Wan2.2-T2V-A14B生成火星殖民基地建设构想视频
  • TSF输入法框架开发全指南:从COM组件到拼音输入法落地
  • 在线考试软件哪个好用?