【问答回复贴】【WPS技能分享】WPS表格-REGEXP函数替换的一个简单应用(不一样的替换技巧)
创作者俱乐部成员
在之前的文章里介绍了几种字符提取和字符截取的方法,恰好今天在社区看到有人提问一个相关的帖子,下面将以这个为例子简单的讲述一下其中的应用,在讲这个之前我们首先提一下今天需要用到的一个匹配模式-替换,之前我们一般使用提取比较多,今天我们将看看替换的用处~
案例原题
原贴的需求是将一段单据详情:【1、单号: BX2408121180,费用事项: 行政招待 2、单号: BX2408121213,费用事项: 客户附加值 3、单号: BX2408125723,费用事项: 业务差旅 4、单号: BX2408122048,费用事项: 行政招待 5、单号: BX2408127028,费用事项: 其他业务推动 6、单号: BX2408124512,费用事项: 行政招待 7、单号: BX2408116167,费用事项: 内勤市内公出 8、单号: BX2408103294,费用事项: 公关活动-落地公关】拆分为8行5列的表格,并且题主要求使用上REGEXP和TEXTSPLIT函数两个函数~
为了能够第一时间使贴主知道结果,在编写本帖之前已经回答了贴主的问题,这里主要是在详细的说说思路~
实现思路
使用REGEXP函数将每一列的文本提取出来,然后用统一特定的分隔符进行分隔,再使用TEXTSPLIT函数将它转换出来,明白了基本思路后我们就开始按照思路进行实施~
实现步骤
步骤一-使用REGEXP函数提取每一列的字段
由于目标是要将一段的单据详细拆分为一个8行5列的表格,我们观察可以发现处理这个问题的关键就是每一列的文本如何提取出来,经过观察,我们可以将这5列的正则表达匹配规则先写出来形成5个匹配组,具体如下表所示~
字段列号 | 正则匹配规则 | 解析 |
1 | \d+(?=、) | 匹配顿号【、】之前的数字 |
2 | (?<=、)\p{Han}+ | 匹配顿号【、】后面的汉字 |
3 | \w+(?=,) | 匹配逗号【,】前面的数字英文 |
4 | (?<=,)\p{Han}+ | 匹配逗号【,】后面的汉字 |
5 | (?<=: )[\p{Han}-]+ | 匹配冒号【:】后面的汉字 |
步骤二-使用统一特定的分隔符进行分隔
在完成这个步骤我们需要补充一个知识,就是正则表达式可以使用括号【()】来分隔每一个匹配组,而每一个匹配组我们可以使用【\1】【\2】来表达捕获那一个匹配组的内容;补充了上面的知识点后,我们就可以继续下一步,虽然我们的目标是每一个匹配组的内容,但是前提我们首先需要匹配完整内容,在利用正则函数的替换模式匹配出各个匹配组的内容并使用特定的分隔符进行分隔~
如何在满足匹配组的内容前提下将整个原始字符串匹配呢?由于篇幅的限制这里就不详细讲解,但我们可以通过一些工具帮忙我们编写,如下图所示,为了简单了解,这里我简单举一个例子,通过前文的描述以表格第一行为例子,我们可以通过【(\d+(?=、))】匹配出结果【1】,而通过【((?<=、)\p{Han}+)】可以匹配到【单号】,经过观察原字符串序号1和文字单号之间有一个顿号,所以我们可以写成【(\d+(?=、))、((?<=、)\p{Han}+)】,这时我们通过正则就可以获取【1、单号】这个内容,由于通过对比原字符串和列表,我们知道他们之间的分隔符是不统一的,这时我们可以使用【\1】代表【1】、【\2】代表【单号】,而我们这里采用【&】来分隔,所以替换后的表达式可以写成【\1&\2】~
完整的表达式如下图所示
(\d+(?=、))、((?<=、)\p{Han}+): (\w+(?=,)),((?<=,)\p{Han}+): ((?<=: )[\p{Han}-]+)
REGEXP(A1,"(\d+(?=、))、((?<=、)\p{Han}+): (\w+(?=,)),((?<=,)\p{Han}+): ((?<=: )[\p{Han}-]+)",2,"\1&\2&\3&\4&\5;")
步骤三-使用TEXTSPLIT函数将它转换出来
通过上面的操作,我们可以知道每一列我们采用【&】分隔,每一行我们采用【;】分隔,这时我们就可以使用TEXTSPLIT函数将他们转换为8行5列的表格区域了,具体实现如下图所示~
TEXTSPLIT(REGEXP(A1,"(\d+(?=、))、((?<=、)\p{Han}+): (\w+(?=,)),((?<=,)\p{Han}+): ((?<=: )[\p{Han}-]+)",2,"\1&\2&\3&\4&\5;"),"&",";",TRUE)
问答回复贴
💡 | 问答帖链接: 关于正则表达式的求助 https://bbs.wps.cn/topic/41031 |
相关知识链接
【WPS技巧分享】WPS表格-99%的人都用得上的几种正则提取写法(简单易懂)https://bbs.wps.cn/topic/40733
【WPS功能分享】WPS表格-原来这才是REGEXP正则函数汉字匹配写法的来源 https://bbs.wps.cn/topic/39391
【WPS功能分享】WPS表格-图解新REGEXP函数下的数组参数(全网最新解析分享) https://bbs.wps.cn/topic/37972
互动补充
相信单纯针对上述情况,使用目前的正则函数也并不是唯一最简单的方式,而且还有其它更简单的实现方式,就算针对正则函数,我相信各位老师也有更好的方法,期待各位老师的指导~
WPS版本
WPS64位内测版(12.1.0.17726-release)
系统版本
Windows11
创作者俱乐部成员
创作者俱乐部成员