ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 301|回复: 5

[分享] ③WPS新增的REGEXP函数,刚琢磨出的新颖用法【共三篇】

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-5-27 14:41 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
今天这篇我们来扩展一下,来看看它的另类用法。


第二参数为数组时会怎样?
将REGEXP函数的第二参数用常量数组看看会怎样:
=REGEXP(A1,{"[^一-龟]+","[一-龟]+"})

如果不理解什么是常量数组,请看这篇文章扫盲:
[color=inherit !important]大括号,用处大,{1,0} {1;0}中间分号逗号是干啥?​mp.weixin.qq.com/s?__biz=MzIxOTYwNTA1OQ==&mid=2247491494&idx=1&sn=4c95209611b0e60ad1d656917c7b4e7f&chksm=97d9ee8aa0ae679c143eef0a1166c4651a0c5c44b0f035825b337aaa1bc7815aa9ca7dcf4149&scene=21#wechat_redirect
在第一篇文章中介绍过,
用=REGEXP(A1,"[^一-龟]+"})提取英文,
用=REGEXP(A1,{"[一-龟]+"})提取汉字。
详见下面链接的第4部分:
[color=inherit !important]①WPS新增的REGEXP函数,非常好用!强烈推荐​mp.weixin.qq.com/s?__biz=MzIxOTYwNTA1OQ==&mid=2247503830&idx=1&sn=e2da716fbb69db0321965e0e6c921875&chksm=97da3efaa0adb7ecd1f8869d00232b9c93b09ca34e1b08eaa6be15a8354a9d3ac378a43a505c&scene=21#wechat_redirect
但当第二参数使用常量数组时,它只给出了每种情况的第一个值。
所以,可利用这个特点,来限定只提取第一个值:
=REGEXP(A1,{"[一-龟]+"})

我们继续深入。
如果第二参数是单元格区域会怎么样呢?

包含式反向查找(根据全称查简称)
=TOCOL(REGEXP(F3,$C$3:$C$12,0),2)

继续扩展,将摘要中购买的多个蔬菜和肉类名称提取出来合并:
=TEXTJOIN("、",1,TOCOL(REGEXP(B2,$F$2:$F$10),2))


根据不连续简称查全称
公式:
=TOCOL(MAP($A$2:$A$9,LAMBDA(x,REGEXP(x,".*"&REGEXP(D2,"(.)",2,"\1.*")))),2)

解释:
要理解这公式首先要理解用REGEXP提取每一个字符(拆分):

然后再用REGEXP的替换模式来插入。
具体用法见最里面的REGEXP函数:
=REGEXP(D2,"(.)",2,"\1.*")
它是在每一个字之间插入“.*”,详细解释:(略)

再在这个REGEXP函数的计算结果的前面,添加一个".*",将拼接结果做为最外围的REGEXP函数的第二参数的正则表达式。
由于REGEXP函数的第一参数不支持数组。所以得用MAP+LAMBDA函数,将A2:A9单元格区域的单元格,逐个传递给REGEXP的第一参数。
然后用TOCOL过滤掉计算结果中的错误值。


给银行卡每四位添加一空格
从后往前每4位添加一空格的公式:
=REGEXP(A45,"(?=(?:\d{4})+$)",2," ")

正则表达式解释:(略)
从前往后每4位添加一空格的公式
=REGEXP(A45,"(\d{4})(?=\d)",2,"\1 ")



给字符串中的数字添加千位分隔符
如果是数值,我们可以用TEXT函数来格式化,添加千位分隔符
公式:
=TEXT(B6,"#,##0.00元")

如果是文本中的数字,就不能使用TEXT函数了,可以用REGEXP函数来添加千位分隔符,公式:
=REGEXP(B2,"(?<=\d)(?=(?:\d{3})+($|[^\d年]))",2,",")


看了上面的内容,是不是觉得REGEXP函数很神奇。
你还发现了哪些神奇的用法,欢迎留言

评分

7

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-5-27 14:45 | 显示全部楼层
十分感谢楼主的分享!!!先收藏备用,有空时再来看看!

TA的精华主题

TA的得分主题

发表于 2024-5-28 15:50 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2024-5-28 20:33 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2024-5-28 21:44 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
感谢分享  点赞支持

TA的精华主题

TA的得分主题

发表于 2024-5-28 21:49 | 显示全部楼层
感谢分享,系统学习!不过有些问题即使照猫画虎还是没有学会,还需系统学习才行。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-6-18 03:28 , Processed in 0.043453 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表