文章目录
- 我们输入公式: =ASC(A2) 全角的1个左/右括号占2个字符的长度,半角的1个左/右括号占1个字符的长度,这个特点我们用肉眼可以观察到。 ASC函数可以将全角字符转换为半角字符。所以全角的左/右括号就转换为了半角的左/右括号。 统一格式后的效果: "8.7(长)*3.6(宽)-6.1(长)*2(宽)+2"
- 我们外面嵌套REGEXP正则表达式函数: =REGEXP(ASC(A2),"(.*)") :表示转义符。 (:将左括号转换为真正的标点符号左括号 ):将右括号转换为真正的标点符号右括号 .*:表示0个或多个连续的字符。 (.*):表示括号及括号里的任意内容。 理论上运用上述正则表达式,REGEXP函数用默认的“提取”模式,可以提取到A2单元格中所有的括号及括号里的任意内容。 但是却出现了下面错误的结果: (长)*3.6(宽)-6.1(长)*2(宽) 原因REGEXP正则表达式函数默认的是“贪婪模式”,它会尽可能多的匹配内容,它会将:“8.7(长)*3.6(宽)-6.1(长)*2(宽)+2”原始数据中,第一个左括号与最后一个右括号中间的内容全部提取出来:“(长)*3.6(宽)-6.1(长)*2(宽)” 所以我们需要完善正则表达式: =REGEXP(ASC(A2),"(.*?)") 在*后面加上一个?号,?是“贪婪模式”向“懒惰模式”转换的开关,这样转换为懒惰模式后,它会尽可能少的匹配括号里面的内容,只会分别匹配单独的每个括号及括号里面的内容。 最后提取结果以数组溢出的方式显示在一行多个单元格中: {"(长)","(宽)","(长)","(宽)"} 继续完善正则公式: =REGEXP(ASC(A2),"(.*?)",2,) =REGEXP(ASC(A2),"(.*?)",2,"") 将第三参数由默认的省略或0修改为2,表示“替换”模式,第4参数表示替换为什么,我们跳过或设置为"",表示替换为空值。 即将查找出来的4组括号及括号里面的内容,替换为空,等价于删除4组括号及括号里面的内容。
- 最外面嵌套EVALUATE函数: =EVALUATE(REGEXP(ASC(A2),"(.*?)",2,)) EVALUATE函数是常用的宏表函数之一,用于对以文字表示的一个公式或表达式求值,并返回结果。 该函数不能在微软Office Excel单元格中直接使用,需要使用自定义名称的方法间接调用。 使用WPS表格的朋友可以不用定义名称,直接在工作表中输入公式即可。 推荐阅读:二维转一维表又一新思路! wps中3个tocol+2个if直接搞定
网友求助SOS:如何将含杂乱内容的计算过程记录,快速计算出结果?由于这位网友的要求比较特殊,我们简化数据源,用案例进行讲解。

微软Office LTSC 2021专业增强版 简体中文批量许可版 2024年09月更新
- 类型:办公软件
- 大小:2.2GB
- 语言:简体中文
- 时间:2024-09-12
查看详情

WPS Office 2025 V12.1.0.21915 官方最新正式版
- 类型:办公软件
- 大小:260MB
- 语言:简体中文
- 时间:2025-07-03
查看详情
如下图所示:
A2单元格是计算过程的记录:8.7(长)*3.6(宽)-6.1(长)*2(宽)+2,不仅含有原始的文本核心算式:8.7*3.6-6.1*2+2,并且在数字后面还标注了带括号的长或宽的信息。并且括号格式还不一致,有些是中文全角的,有些是英文半角的,这些特殊处理细节都对B2单元格的计算结果增加了难度。
A2单元格的理论计算过程与结果是,我们想要得到的就是B2的结果:
=8.7*3.6-6.1*2+2
=21.12

下面拆解公式,分步骤讲解作用原理。
我们输入公式:
=ASC(A2)
全角的1个左/右括号占2个字符的长度,半角的1个左/右括号占1个字符的长度,这个特点我们用肉眼可以观察到。
ASC函数可以将全角字符转换为半角字符。所以全角的左/右括号就转换为了半角的左/右括号。
统一格式后的效果:
"8.7(长)*3.6(宽)-6.1(长)*2(宽)+2"

我们外面嵌套REGEXP正则表达式函数:
=REGEXP(ASC(A2),"(.*)")
- :表示转义符。
- (:将左括号转换为真正的标点符号左括号
- ):将右括号转换为真正的标点符号右括号
- .*:表示0个或多个连续的字符。
- (.*):表示括号及括号里的任意内容。
理论上运用上述正则表达式,REGEXP函数用默认的“提取”模式,可以提取到A2单元格中所有的括号及括号里的任意内容。
但是却出现了下面错误的结果:
(长)*3.6(宽)-6.1(长)*2(宽)

原因REGEXP正则表达式函数默认的是“贪婪模式”,它会尽可能多的匹配内容,它会将:“8.7(长)*3.6(宽)-6.1(长)*2(宽)+2”原始数据中,第一个左括号与最后一个右括号中间的内容全部提取出来:“(长)*3.6(宽)-6.1(长)*2(宽)”
所以我们需要完善正则表达式:
=REGEXP(ASC(A2),"(.*?)")
在*后面加上一个?号,?是“贪婪模式”向“懒惰模式”转换的开关,这样转换为懒惰模式后,它会尽可能少的匹配括号里面的内容,只会分别匹配单独的每个括号及括号里面的内容。
最后提取结果以数组溢出的方式显示在一行多个单元格中:
{"(长)","(宽)","(长)","(宽)"}

继续完善正则公式:
=REGEXP(ASC(A2),"(.*?)",2,)
=REGEXP(ASC(A2),"(.*?)",2,"")
将第三参数由默认的省略或0修改为2,表示“替换”模式,第4参数表示替换为什么,我们跳过或设置为"",表示替换为空值。
即将查找出来的4组括号及括号里面的内容,替换为空,等价于删除4组括号及括号里面的内容。

最外面嵌套EVALUATE函数:
=EVALUATE(REGEXP(ASC(A2),"(.*?)",2,))
EVALUATE函数是常用的宏表函数之一,用于对以文字表示的一个公式或表达式求值,并返回结果。

该函数不能在微软Office Excel单元格中直接使用,需要使用自定义名称的方法间接调用。
使用WPS表格的朋友可以不用定义名称,直接在工作表中输入公式即可。
推荐阅读:二维转一维表又一新思路! wps中3个tocol+2个if直接搞定