在很久之前已经开发过的一些自定义函数,未能有详细的讲解,接下来几波中着重对之前开发过的自定义函数进行详细讲解及示例说明,希望能够帮助到普通用户们能顺利使用,此篇介绍为正则表达式函数。
文章出处说明
原文在简书上发表,再同步到Excel催化剂微信公众号或其他平台上,文章后续有修改和更新将在简书上操作, 其他平台不作同步修改更新,因此建议阅读其他出处的文章时,尽可能跳转回简书平台上查看。
为何要使用正则表达式
正则表达式在字符串处理中,是一大利器,从复杂的杂乱的字符串内容中,提取出有用的符合要求的信息,仅使用Excel自带的文本处理函数如LEFT/RIGHT/MID/SUBSTITUTE等,明显力不从心。
正则表达式在各种主流的编程语言中都有支持,语法较为相近,学习成本也不算太高,现把正则表达式在Excel的自定义函数中得以实现,可以极大地方便了广大用户在Excel环境中作字符串的提取工作。相对其他非Excel环境来说,只是简单的一个自定义函数即可调用,无需找各种编程环境来实现,实用性方面还是很强。
DotNet版的正则表达式和VBA版有何不同?
VBA是微软已经停止更新的语言,在正则表达式的功能上支持有限(但也基本够用)。在DotNet版的正则表达式中,支持的功能更多。如支持使用Split分割、零宽度先行断言、零宽度后发断言、可命名组等。
详细的正则表达式教程可自行百度或查看微软官方的文档
https://docs.microsoft.com/zh-cn/dotnet/standard/base-types/regular-expressions?view=netframework-4.7.2
自定义函数介绍
在Excel版正则自定义函数中,大概有以下的一些参数需要输入,看起来很多,但其实有相当部分是可以使用默认参数可省略输入的。
- input=输入
- pattern=匹配规则
- matchNum=确定第几个匹配返回值,索引号从0开始,第1个匹配,传入0
- groupNum=确定第几组匹配,索引号从1开始,0为返回上层的match内容。
- returnNum,返回split数组中的第几个元素,索引从0开始
- isCompiled=是否编译,是为1,否为0,暂时没有测试过哪个快在数据量大时,文档好像说数据量大用编译比较好
- isECMAScript,用来指定w是否匹配一些特殊编码之类的例如中文,当false时会匹配中文,指定为true时,可能和其他的指定有些冲突。
- RegexOptions.ECMAScript 选项只能与 RegexOptions.IgnoreCase 和 RegexOptions.Multiline 选项结合使用。在正则表达式中使用其他选项会导致 ArgumentOutOfRangeException。
- isRightToLeft,从右往左匹配。
正则表达式,最复杂的部分是pattern的匹配规则,其他的都较好理解。
因Excel参数输入过多不太友好,在【正则表达式选项】的设定上使用DotNet的可在Pattern里设定内联字符的方式输入,即部分正则表达式选项的控制,落在pattern匹配规则上输入。
如pattern= (?i)[a-z]中的(?i)是忽略大小写的意思,且为全局性忽略。
而pattern=abc(?i)[a-z]时,为局部忽略大小写,前面的abc是不忽略大小写的匹配。
具体函数实现
针对正则函数的匹配、替换、分割等作了一系列的自定义函数实现,具体可参照示例文件来作进一步的理解。可到QQ群文件里下载示例文件。
RegexIsMatch函数
后面3个参数一般仅需要FALSE或省略输入。
RegexMatch函数
需要传入返回的是哪个索引的Match返回值,索引号从0开始。
RegexMatchs函数
相对RegexMatch仅返回一个匹配值,此函数返回的是所有匹配值,并可控制是按列还是按行的方式返回多值
RegexMatchsFromFile函数
此函数和RegexMatchs唯一区别在于引用的input部分,此函数是传入一个文本文件的路径,读取此路径下的文本文件作为input的内容,可能部分内容不好放到单元格里引用时可以使用引函数来引用放到文本文件里的内容。
RegexMatchGroup函数
需要指定Match和Group的索引项,其中Group的索引项是从1开始。
RegexMatchGroups函数
同样的,返回指定索引Match下的所有Group值时,无需指定Group的索引,返回的是所有的Group值
RegexMatchGroupsFromFile函数
同理,此函数是第1参数input是由文本文件的路径组成。调用文本文件的内容作为input参数的内容。
RegexReplace函数
把匹配到的内容替换成其他内容,相对上述的Match或Group是提取匹配到的内容,此时是替换了匹配的内容。
RegexSplit函数
此处的pattern是用于把原input字符串作分割使用。通过指定returnNum来返回指定索引的结果值。
RegexSplit函数
同理,相对RegexSplit返回指定索引值,此函数返回的是所有结果值。
总结
正则表达式用于处理字符串无疑是强大无比的,通过pattern和RegexOptions的控制,可以变化出无数的规则用于匹配特定内容,在Excel的环境下,可以通过自定义函数的调用方便来使用正则表达式,对日常数据处理来说将带来无穷的便利。
普通非编程人员可以简单了解下正则表达式的基础知识,即可上手使用,还是非常值得投资一些时间来学习正则表达式的。
系列文章
一文带你全面认识Excel催化剂系列功能
安装过程详解及安装失败解决方法
第1波-工作表导航
第2波-数字格式设置
第3波-与PowerbiDesktop互通互联
第4波-一大波自定义函数高级应用,重新定义Excel函数的学习和使用方法
第5波-使用DAX查询从PowerbiDeskTop中获取数据源
第6波-导出PowerbiDesktop模型数据字典
第7波-智能选区功能
第8波-快速可视化数据
第9波-数据透视表自动设置
第10波-快速排列工作表图形对象
第11波-快速批量插入图片
第12波-快速生成、读取、导出条形码二维码
第13波-一键生成自由报表
第14波-一键生成零售购物篮分析
第15波-接入AI人工智能NLP自然语言处理
第16波-N多使用场景的多维表转一维表
第17波-批量文件改名、下载、文件夹创建等
第18波-在Excel上也能玩上词云图
第19波-Excel与Sqlserver零门槛交互-查询篇
第20波-Excel与Sqlserver零门槛交互-数据上传篇
第21波-Excel与Sqlserver零门槛交互-执行SQL
第22波-Excel文件类型、密码批量修改,补齐Power短板
第23波-非同一般地批量拆分工作表
第24波-批量发送邮件并指点不同附件不同变量
第25波-小白适用的文本处理功能
第26波-正确的Excel密码管理之道
第27波-Excel工作表设置快捷操作
第28波-工作薄瘦身,安全地减少非必要冗余
第29波-追加中国特色的中文相关自定义函数
第30波-工作表快捷操作(批量创建、命名、排序、工作表目录)
第31波-数量金额分组凑数功能,财务表哥表姐最爱
第32波-空行空列批量插入和删除
第33波-报表形式数据结构转标准数据源
第34波-提取中国身份证信息、农历日期转换相关功能
第35波-Excel版最全单位换算,从此不用到处百度找答案
第36波-新增序列函数用于生成规律性的循环重复或间隔序列
第37波-把Sqlserver的强大分析函数拿到Excel中用
第38波-比Vlookup更好用的查找引用函数
关于Excel催化剂
Excel催化剂先是一微信公众号的名称,后来顺其名称,正式推出了Excel插件,插件将持续性地更新,更新的周期视本人的时间而定争取一周能够上线一个大功能模块。Excel催化剂插件承诺个人用户永久性免费使用!
Excel催化剂插件使用最新的布署技术,实现一次安装,日后所有更新自动更新完成,无需重复关注更新动态,手动下载安装包重新安装,只需一次安装即可随时保持最新版本!