如何从中文和数字混合的文本中,提取部分数字?

如何从中文和数字混合的文本中,提取部分数字?


昨天在中国移动培训结束后,学员小K咨询到:有什么方法可以从中文和数字混合的文本中,提取部分数字?

小K的问题是这样的,她想从下图所示的套餐分类的数据中提取金额。

如何从中文和数字混合的文本中,提取部分数字?

如果金额的数字长度是一致的,我们可以先用FIND函数查询“元”字的位置,再用MID函数截取我们想要的数字。可问题就在于数字的长度是不一样的,有1位的、2位的、3位的,最多不超过3位的数字。

当我们在函数运用的过程中卡壳了,觉得写不下去了,不用着急,一步一步来。所以,我还是按照刚刚的思路,用FIND函数查询出“元”字的位置,再用左取字符的LEFT函数取出“元”字左侧的所有字符,公式如下:

=LEFT(A2,FIND("元",A2)-1)

如何从中文和数字混合的文本中,提取部分数字?

接着就要想一想如何从右往左取出长短不一的1-3位的数字。首先我用RIGHT函数从右往左取1-3位的数字,公式如下:

=RIGHT(B2,ROW($1:$3))

ROW函数用于返回行号,ROW($1:$3)返回的就是1、2、3三个数字,意味着分别从右往左取1个字符、2个字符、3个字符,以B2单元格的内容为例,就会形成这样的结果:{"8";"58";"惠58"}

接着在RIGHT函数的结果前面添加负号,公式如下:

=-RIGHT(B2,ROW($1:$3))

添加负号的作用是将数值转换为负数,含有文本字符的字符串则变成错误值:{-8;-58;#VALUE!}。

最后用LOOKUP函数,使用1作为查询值,在由负数、0和错误值构成的数组中,忽略错误值提取最后一个等于或小于1的数值。最后再使用负号,将提取出的负数转为正数。

=-LOOKUP(1,-RIGHT(B2,ROW($1:$3)))

到这个步骤,我们就实现了从中文和数字混合的文本中,提取出部分数字。这是函数的运行结果:

如何从中文和数字混合的文本中,提取部分数字?

上一篇:Matlab直线一级倒立摆控制方法研究


下一篇:MATLAB 在图像处理和机器视觉的应用举例 - 官网培训笔记