四时宝库

程序员的知识宝库

regexp+sum快准狠,一个单元格里对【...】里的数字求和

粉丝求助SOS:求助,这种在一个单元格里【...】(中括号)里的数字,怎么求和?


如下图所示

A2单元格为混合文本组成的字符串,其中包含数字,汉字,标点符号,数学符号等。我们想要对混合文本中“【】”里面的数字相加求和。也就是在A5单元格中显示求和结果:1+2+2+3,结果等于8。




在没有REGEXP函数之前,这个问题还真有点小难,可能要通过若干函数嵌套,用较长的公式解决,看着也不容易让人理解其含义。自从出现了REGEXP正则表达式函数之后,就变得“快准狠”了。



WPS:只有一个regexp函数,通过第3个参数的匹配模式来实现提取、判断、替换功能。


=regexp(原始字符串,正则表达式,[匹配模式],[替换内容])

匹配模式0为提取,1为判断,2为替换。


Excel:有3个正则函数,regexextract用于提取文本、regexreplace用于替换文本、regextest用于测试字符串是否符合正则表达式。


①=regexextract(字符串,正则表达式,[返回模式],[是否区分大小写])

第3参数不选,默认返回一个匹配的值,第4参默认区分大小写匹配项。

②=regexreplace(字符串,正则表达式,替换为,[替换第几个],[是否忽略大小写])

第4个参数指定要替换第几个,为0时替换所有实例,负数则替换倒数第几个。

③=regextest(字符串,正则表达式,是否忽略大小写)



第一步:正则提取数字


我们输入公式:

=REGEXP(A2,"【\d+")


\d+:表示1个或多个连续的任意数字。


【\d+:用“【”与\d+连接,表示所有“【”与任意数字的组合,包括但不限于本例中的:【1,【2,【2,【3。




第二步:重置位置


继续完善正则表达式部分:

=REGEXP(A2,"【\K\d+")


\K:表示重置字符位置。它可以将该符号前面的元素省略,只保留该符号后面的元素。


所以将\K放在“【”的前面,其右面跟随的是\d+,即将上一步公式匹配到结果中的“【”省略,只保留\d+任意数字部分。


这样做的目的是只保留能被运算的数字,符号不要:

{"1","2","2","3"}




第三步:格式转换


继续完善公式:

=REGEXP(A2,"【\K\d+")*1


对REGEXP函数的返回结果乘以1。因为REGEXP函数默认返回的数字为文本型数值,不能参与直接运算。乘以1之后可以转换为真正的数字,可以后续参与运算:

{1,2,2,3}




第四步:简单求和


最外面嵌套SUM求和函数:

=SUM(REGEXP(A2,"【\K\d+")*1)


对REGEXP函数返回的数组溢出结果:{1,2,2,3}中的各元素数字求和即可。


发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接