【社区答疑】WPS表格利用新函数批量根据序号换行之正则表达式REGEXP函数法(二)
WPS函数专家
要想下班早,表格必须用的好!
大家好,我是张俊。
⭐场景
关于@馒头鱼求助问题的第二种方法来了,希望将很多单元格中的内容,根据序号批量增加换行符,左侧单元格为原始数据,右侧单元格为期待效果,如下图所示:
昨天已经发过一帖说说明了一种简单容易理解的方法,【社区答疑】WPS表格利用新函数批量根据序号换行之批量替换字符SUBSTITUTES函数法(一),如有宝子们感兴趣可以参考。其实对于替换字符类场景,正则表达式REGEXP函数也是可以解决的,今天就来分享第二种方法看如何来解决此问题。
1. 正则表达式REGEXP函数
对于本案例来说,用到了替换功能,其实新函数REGEXP也是支持对匹配的数据替换,REGEXP函数基本语法如下:
=REGEXP(原始字符串,正则表达式,[匹配模式],[替换内容])
REGEXP函数简单来理解,就是将参数1的内容,根据参数2的正则表达式规则匹配数据后,根据参数3选择方法,如选择为2(替换),则可以在参数4中填写需要替换的内容。参数3的可选内容如下:
因此利用这一特性,也可以将本案例中的数据来匹配序号1-9包含后面的圆点(.),最终将其替换即可,具体完整函数写法如下:
=REGEXP(C3,"(\d\.)",2,CHAR(10)&"\1")
📢 | 函数解释: 1.正则表达式中的\d代表匹配一个数字,如果是2位或多位的,可以使用\d+,表示匹配一个或多个连续数字。 2.正则表达式中\.代表一个圆点,为啥不直接写圆点(.)呢?因为.在正则表达式中代表匹配任意单个字符(除换行符),因此想要表达.就需要用转义符\对其转义,因此写作\.。 3.正则表达式中的一对圆括号()表示对其分组,因此需要输入(\d\.)表示对匹配的数字和圆点分为一组,主要为了后期替换内容做铺垫。 4.正则表达式中的\1意义是前面正则表示已经有捕获的分组,也就是用()匹配的,则\1表示前面第一个捕获分子的内容引用。本案例中表示序号1-9和后面的圆点(.)。 |
通过REGEXP函数得到效果如下:
💡 | 通过效果图可以发现2个问题: 1.每个匹配的数据前面都有一个空行,主要是因为每个匹配的内容前面都有一个换行符CHAR(10),因此需要将其处理,需要将(\d\.)调整为不包含1的就可以,那就调整为([2-9]\.),代表只考虑2-9的数字就行,如果是序号在100以内,可以考虑将其调整为2-99即可。 2.如果目标列为空,则会报错#VALUE!,那就需要在前面嵌套IFERROR函数来规避错误,IFERROR函数主要处理参数1,如果参数报错,则直接返回参数2的结果。 |
通过以上问题发现和调整,最终完整公式如下:
=IFERROR(REGEXP(C3,"([2-9]\.)",2,CHAR(10)&"\1"),"")
最终效果图如下:
2. 大佬提供公式
针对这个问题,在大佬眼里,也有不同的解题思路,具体如下:
2.1 TEXTJOIN+REGEXP函数法
大佬提供的第一种思路就是利用TEXTJOIN函数的连续拼接字符来处理,具体完整函数写法如下:
=TEXTJOIN(CHAR(10),1,REGEXP(C3,"\d+\..+?(?=\d\.|$)"))
具体效果如下图所示:
2.2 REGEXP函数强制换行法
大佬的另外一种思路是对REGEXP函数的第四个参数强制换行(快捷键:Alt+Enter<回车>),具体完整函数写法如下:
=REGEXP(C3,"(?<!^)(\d\.)",2,"
\1")
函数效果图如下:
2.3 根据大佬思路改编
根据2.2大佬的思路,可以对我们的函数进行改编,也直接利用强制换行法(快捷键:Alt+Enter<回车>),来省略函数字符,具体完整函数写法如下:
=REGEXP(C3,"([2-9]\.)",2,"
\1")
函数效果图如下:
对于大佬们的公式,由于对于初学者理解难度较大,因此在这里对于函数不做解释。也欢迎大佬们在评论区说出你们其他的函数方法。
都看到这里了,记得得❤️❤️❤️点赞(红心)❤️❤️❤️和⭐⭐⭐收藏(五角星)⭐⭐⭐并在评论区评论“我学会了!”,您的❤️❤️❤️点赞(红心)❤️❤️❤️、⭐⭐⭐收藏(五角星)⭐⭐⭐和评论是对我最大的支持!
🚩 | 练习文件:👉【社区答疑】WPS表格利用新函数批量根据序号换行👈 |
上期帖子地址:
【社区答疑】WPS表格利用新函数批量根据序号换行之批量替换字符SUBSTITUTES函数法(一)
个人往期帖子合集:【帖子合集】个人往期帖子合集来了!
创作者俱乐部成员
WPS函数专家
创作者俱乐部成员