在很久之前已经开发过的一些自定义函数,未能有详细的讲解,接下来几波中着重对之前开发过的自定义函数进行详细讲解及示例说明,希望能够帮助到普通用户们能顺利使用,此篇介绍为正则表达式函数。

文章出处说明

原文在简书上发表,再同步到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是不忽略大小写的匹配。

正则表达式选项表

具体可参照官方文档:
https://docs.microsoft.com/zh-cn/dotnet/standard/base-types/regular-expression-options?view=netframework-4.7.2

具体函数实现

针对正则函数的匹配、替换、分割等作了一系列的自定义函数实现,具体可参照示例文件来作进一步的理解。可到QQ群文件里下载示例文件。

正则函数的函数分类位置

RegexIsMatch函数

后面3个参数一般仅需要FALSE或省略输入。

RegexIsMatch函数用法示例

RegexMatch函数

需要传入返回的是哪个索引的Match返回值,索引号从0开始。

RegexMatch函数用法示例

RegexMatchs函数

相对RegexMatch仅返回一个匹配值,此函数返回的是所有匹配值,并可控制是按列还是按行的方式返回多值

RegexMatchs

RegexMatchsFromFile函数

此函数和RegexMatchs唯一区别在于引用的input部分,此函数是传入一个文本文件的路径,读取此路径下的文本文件作为input的内容,可能部分内容不好放到单元格里引用时可以使用引函数来引用放到文本文件里的内容。

RegexMatchGroup函数

需要指定Match和Group的索引项,其中Group的索引项是从1开始。

RegexMatchGroup函数用法示例

RegexMatchGroups函数

同样的,返回指定索引Match下的所有Group值时,无需指定Group的索引,返回的是所有的Group值

RegexMatchGroups函数用法示例

RegexMatchGroupsFromFile函数

同理,此函数是第1参数input是由文本文件的路径组成。调用文本文件的内容作为input参数的内容。

RegexReplace函数

把匹配到的内容替换成其他内容,相对上述的Match或Group是提取匹配到的内容,此时是替换了匹配的内容。

RegexReplace函数用法示例

RegexSplit函数

此处的pattern是用于把原input字符串作分割使用。通过指定returnNum来返回指定索引的结果值。

RegexSplit函数用法示例

RegexSplit函数

同理,相对RegexSplit返回指定索引值,此函数返回的是所有结果值。

RegexSplits函数用法示例

总结

正则表达式用于处理字符串无疑是强大无比的,通过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催化剂插件使用最新的布署技术,实现一次安装,日后所有更新自动更新完成,无需重复关注更新动态,手动下载安装包重新安装,只需一次安装即可随时保持最新版本!

个人永久性免费-Excel催化剂功能第39波-DotNet版的正则处理函数的更多相关文章

  1. 个人永久性免费-Excel催化剂功能第47波-VBA开发者喜爱的加密函数类

    VBA的确是个很不错的编程工具,寄生在OFFICE内,无需安装庞大的开发环境,即开即用,方便灵活,能实现的事情也很多,但毕竟VBA是微软停止更新维护将近20年的一种语言,计算机的世界发展速度有多快大家 ...

  2. 个人永久性免费-Excel催化剂功能第105波-批量调整不规范的图形对象到单一单元格内存储

    在日常制表过程中,一个不得不面对的问题,许多的工作起点是基于其他人加工过的表格,无论自己多大的本领,面对不规范的其他人的制作的表格,经过自己的手,该擦的屁股还是要自己去亲手去擦,而带出来的也只会是一堆 ...

  3. 个人永久性免费-Excel催化剂功能第104波-批量选择多种类型的图形对象

    在Excel的日常操作过程中,选择绝对是一个高频的操作,之前开发过一些快速选择单元格区域的辅助功能,除了单元格区域,Excel强大之处在于,类似PhotoShop那般可以存放多种图形,并且有图层先后顺 ...

  4. 个人永久性免费-Excel催化剂功能第102波-批量上传本地图片至网络图床(外网可访问)

    自我突破,在100+功能后,再做有质量的功能,非常不易,相对录制视频这些轻松活,还是按捺不住去写代码,此功能虽小,但功课也做了不少,希望对真正有需要的群体带来一些惊喜. 背景介绍 图床的使用,一般是写 ...

  5. 个人永久性免费-Excel催化剂功能第103波-批量打开多文件或多链接

    有时简单的东西,却带来许多的便利,为了让大家可以记住并容易找寻到此功能,也将这么简单的功能归为一波,反正已经100+波了,也无需为了凑功能文章而故意罗列一些小功能带忽悠性地让人觉得很强大. 使用场景 ...

  6. 个人永久性免费-Excel催化剂功能第101波-批量替换功能(增加正则及高性能替换能力)

    数据处理无小事,正如没有人活在真空理想环境一下,在数据分析过程中,也没有那么真空理想化的数据源可以使用,数据处理占据数据分析的80%的时间,每一个小小的改善,获益都良多.Excel查找替换,有其局限性 ...

  7. 个人永久性免费-Excel催化剂功能第99波-手机号码归属地批量查询

    高潮过往趋于平静,送上简单的手机号码归属地查询,因接口有数量限制,仅能满足少量数据需求,如有大规模数据却又想免费获得,这就成为无解了,数据有价,且用且珍惜. 业务使用场景 除了日常自带的手机各种管家为 ...

  8. 个人永久性免费-Excel催化剂功能第100波-透视多行数据为多列数据结构

    在数据处理过程中,大量的非预期格式结构需要作转换,有大家熟知的多维转一维(准确来说应该是交叉表结构的数据转二维表标准数据表结构),也同样有一些需要透视操作的数据源,此篇同样提供更便捷的方法实现此类数据 ...

  9. 个人永久性免费-Excel催化剂功能第98波-零代码零距离轻松接触并拥有金融大数据

    数据产生价值的一个最突出的领域-金融领域,股票.证券.上市公司财务报表等,多少人在其中发掘出宝贵的数据价值.今天Excel催化剂联合Tushare金融大数据平台,让这一切的数据都能成为你我普通人零代码 ...

随机推荐

  1. C#字符类型

    C#字符串类型采用Unicode字符集,一个Unicode标准字符长度位16位,它允许用单个编码方案表示世界上使用的所有字符. 字符类型表示位char. 关于字符的转义:C#也可以使用字符转义,用   ...

  2. 用TTcpClient和TTcpServer进行文件的传输

    发送数据时有Sendln,SendBuf,SendStream.接收数据时有Receiveln,ReceiveBuf,当时我很奇怪为什么没有ReceiveStream.因为很自然的想到是对应关系的.但 ...

  3. 我怎么忽略了身份框架魔法,只是使用OWIN验证的中间件,以获得要求我寻求什么呢?

    该OWIN中间件的东西第三方登录集成到您的ASP.NET应用程序是非常酷的,但我似乎无法弄清楚如何就剜出来的新的ID,它取代了蹩脚的成员身份 API.我没有兴趣在坚持所产生的债权,并在英法为基础的数据 ...

  4. 使用Boost的DLL库管理动态链接库

    Boost 1.61新增了一个DLL库,跟Qt中的QLibrary类似,提供了跨平台的动态库链接库加载.调用等功能.http://www.boost.org/users/history/version ...

  5. 配置QtCreator+CDB远程调试环境(用到了符号表) good

    相关环境信息:开发机Win7 x64.远程机器WinXP.调试器是CDB.Qt版本5.2.1 一.部署远程机器环境 我这里用的是虚拟机(Windows XP),根据你要调试的程序选择安装不同架构的Wi ...

  6. FilterFactory是一款将图片转换成SVG的在线生成工具。

    FilterFactory是一款将图片转换成SVG的在线生成工具. FilterFactory 彩蛋爆料直击现场 FilterFactory是一款将图片转换成SVG的在线生成工具.

  7. 为什么API多用C而不是C++,为什么C++程序大多不使用异常

    读Defective C++随笔 不尽知用兵之害者,则不能尽知用兵之利也 ——<孙子兵法> 1.为什么API多用C而不是C++以前就一直很奇怪,为什么API大都用C的方式提供,即使有C++ ...

  8. Delphi下IOC 模式的实现(反转模式,即Callback模式)

    IOC英文为 Inversion of Control,即反转模式,这里有著名的好莱坞理论:你呆着别动,到时我会找你.Ioc模式是解决调用者和被调用者之间关系的模式,可以有效降低软件的耦合度,并适合团 ...

  9. elasticsearch.yml 常用参数说明

    cluster.name: 指定node所属的cluster. node.name: 本机的hostname. node.master: 是否可以被选举为master节点.(true or false ...

  10. excel导入到数据库的异常处理

    excel导入到数据库,这个是经常发生的,今天就碰到了一个非常郁闷的事情,在导入到oracle数据的时候,总是出现ORA-01756: 引号内的字符串没有正确结束,认真的排插了数据当中可能出现的错误, ...