大数跨境
0
0

精讲:使用Regexextract()函数的一个案例

精讲:使用Regexextract()函数的一个案例 Excel Plus---不止是Excel
2025-11-06
5
Regexextract()函数:Excel终于支持正则表达式了
Regexextract()函数前段时间已经讲过了,最近在知乎上刚好有个知友问的问题可以使用该函数,如下所示,现在需要求出每个单元格当中白菜的总金额,比如单元格A2,里面有白菜36元,白菜15元,因此,总金额就是36+15=51元,以下只是列出两个单元格,如果有N多个单元格,还得用公式。
这个案例就是很典型的可以使用正则表达式,规则非常明显,首先要提取出“白菜”之后“元”之前的文本型数字,可能有多个,然后再将其相加。这里就要用到“环视”了。
肯定式向后看是“?<=", 对于“白菜”来说,数字是在它的后面,可以表示为"?<=白菜", 肯定式向前看是“?=",对于“元”来说,数字是在它的前面,可以表示为"?=元"。中间的数字可以使用"\d+", "\d"表示数字,"+"表示1次或者多次,这里就是表示1位数或者多位数。综合起来,公式就是:

=SUM(--REGEXEXTRACT(A2,"(?<=白菜)\d+(?=元)",1))

如果要整表输出,就可以使用上次刚讲的map()函数:

=MAP(A2:A3,LAMBDA(x,SUM(--REGEXEXTRACT(x,"(?<=白菜)\d+(?=元)",1))))

如果使用"\k"参数,则可以将公式简化为:

=SUM(--REGEXEXTRACT(A2,"白菜\K\d+(?=元)",1))


这里的"白菜\K"表示白菜之后,但是不包括“白菜”本身。

以上案例中,里面出现的数字都是整数,如果其中有小数,则上述公式就要作相应的修改了,要加上"\.*\d+",

转义字符"\"加上".",表示"."本身,"\.*"中后面的"*",表示前面的字符(小数点)出现0次或者1次,因为可能的情况是,有些是整数,有些是小数,后面的"\d+"指的是小字点后面的整数。

因此,公式修改为:

=SUM(--REGEXEXTRACT(A2,"白菜\K\d+\.*\d+(?=元)",1))

=SUM(--REGEXEXTRACT(A2,"(?<=白菜)\d+\.*\d+(?=元)",1))



【声明】内容源于网络
0
0
Excel Plus---不止是Excel
分享20年外企供应链工作经验中关于EXCEL函数,公式,数组, VBA编程, PYTHON编程, POWER BI, POWER AUTOMATE, R语言编程等方面的实操以及技巧。
内容 44
粉丝 0
Excel Plus---不止是Excel 分享20年外企供应链工作经验中关于EXCEL函数,公式,数组, VBA编程, PYTHON编程, POWER BI, POWER AUTOMATE, R语言编程等方面的实操以及技巧。
总阅读80
粉丝0
内容44