今天这篇我们来扩展一下,来看看它的另类用法。
![](https://pic1.zhimg.com/v2-4461c5078e4160176321a317fb477414_b.jpg)
第二参数为数组时会怎样? 将REGEXP函数的第二参数用常量数组看看会怎样: =REGEXP(A1,{"[^一-龟]+","[一-龟]+"}) ![](https://pic3.zhimg.com/v2-e9c3337571f8191f8df361e6402fba86_b.jpg)
如果不理解什么是常量数组,请看这篇文章扫盲: [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![](https://pic4.zhimg.com/v2-8ec8ca395a8330b77fb67a8b9308ec93_180x120.jpg)
但当第二参数使用常量数组时,它只给出了每种情况的第一个值。 所以,可利用这个特点,来限定只提取第一个值: =REGEXP(A1,{"[一-龟]+"}) ![](https://pic3.zhimg.com/v2-e746437f83b3442a603d514c4395311a_b.jpg)
我们继续深入。 如果第二参数是单元格区域会怎么样呢?
![](https://pic3.zhimg.com/v2-75d87394feebd2fc363e7de679eb2d0a_b.jpg) 包含式反向查找(根据全称查简称) =TOCOL(REGEXP(F3,$C$3:$C$12,0),2) ![](https://pic3.zhimg.com/v2-cdc63735c60f80c9710b5e8a84219e66_b.jpg)
继续扩展,将摘要中购买的多个蔬菜和肉类名称提取出来合并: =TEXTJOIN("、",1,TOCOL(REGEXP(B2,$F$2:$F$10),2)) ![](https://pic3.zhimg.com/v2-ee98e522088b6b8e43389663a15e32f2_b.jpg)
![](https://pic4.zhimg.com/v2-25310c3b58d6fbac2dc0dfd7fcba446f_b.jpg) 根据不连续简称查全称 公式: =TOCOL(MAP($A$2:$A$9,LAMBDA(x,REGEXP(x,".*"®EXP(D2,"(.)",2,"\1.*")))),2) ![](https://pic1.zhimg.com/v2-125bef238a090c54434072adfcbcc148_b.jpg)
解释: 要理解这公式首先要理解用REGEXP提取每一个字符(拆分): ![](https://pic2.zhimg.com/v2-6a5e5eb0bb521f2262de5be4dd75d45d_b.jpg)
然后再用REGEXP的替换模式来插入。 具体用法见最里面的REGEXP函数: =REGEXP(D2,"(.)",2,"\1.*") 它是在每一个字之间插入“.*”,详细解释:(略) ![](https://pic3.zhimg.com/v2-a44764d169639c39c00f7bd31642f2de_b.jpg)
再在这个REGEXP函数的计算结果的前面,添加一个".*",将拼接结果做为最外围的REGEXP函数的第二参数的正则表达式。 由于REGEXP函数的第一参数不支持数组。所以得用MAP+LAMBDA函数,将A2:A9单元格区域的单元格,逐个传递给REGEXP的第一参数。 然后用TOCOL过滤掉计算结果中的错误值。
![](https://pic4.zhimg.com/v2-49b4b083fbedb02a6f1aca54cc11a7c3_b.jpg) 给银行卡每四位添加一空格 从后往前每4位添加一空格的公式: =REGEXP(A45,"(?=(?:\d{4})+$)",2," ") ![](https://pic4.zhimg.com/v2-7f6462af1551ccfb8ec860c1fb424ef3_b.jpg)
正则表达式解释:(略) 从前往后每4位添加一空格的公式 =REGEXP(A45,"(\d{4})(?=\d)",2,"\1 ") ![](https://pic4.zhimg.com/v2-b5d5d5f614b276a003e044aff80e9d3b_b.jpg)
![](https://pic1.zhimg.com/v2-fe0ee00c5d4364534b08c17ec45aaab8_b.jpg) 给字符串中的数字添加千位分隔符 如果是数值,我们可以用TEXT函数来格式化,添加千位分隔符 公式: =TEXT(B6,"#,##0.00元") ![](https://pic1.zhimg.com/v2-577c8b9c260948e6b8686be26d6f3540_b.jpg)
如果是文本中的数字,就不能使用TEXT函数了,可以用REGEXP函数来添加千位分隔符,公式: =REGEXP(B2,"(?<=\d)(?=(?:\d{3})+($|[^\d年]))",2,",") ![](https://pic1.zhimg.com/v2-ad2eca0e62eba38cb970099d004416dc_b.jpg)
看了上面的内容,是不是觉得REGEXP函数很神奇。 你还发现了哪些神奇的用法,欢迎留言
|