Excel文本有多个相同符号,如何分别提取该符号前、中、后的内容
itomcoil 2025-03-10 17:21 22 浏览
当excel数据列中,部分的单元格文本中包含了不止一个的相同特定符号,该如何提取这个符号之前,及这两个符号之间,或符号之后的字符串内容。
如下图所示,在A列源数据中,是工程项目使用的一些材料的尺寸面积,在一些单元格中,包含了不止一个材料的信息,而使用了符号”+“来分隔不同材料的尺寸信息。
但稍微简单一点的是,这列数据最多只包含了两个“+”号,也就是3组材料的尺寸信息。
现在我们需要将这列数据进行分隔,以符号“+”为分隔符,分别提取到3列中。
如单元格文本中只有一个材料的尺寸信息,则提取到第1列;包含两个材料的信息,则分别提取到第1列和第2列;而单元格中出现了两个“+”号,即3种材料信息,那么按照符号“+”前、中、后的顺序分别提取到第1列到第3列。
这个场景,其实使用分列是最快捷的,因为它是按照相同的指定分隔符号来分列,基本上只需要通过一次分列操作就能将数据按照符号分成需要的列。
但有时我们的需求就是要通过公式来提取字符,那么今天,作者还是介绍以下几个公式,分别来提取文本中字符的前中后位置的内容。
- 首先是在第1列提取第一个材料的信息。
由于第1个材料的信息拥有固定的位置,即位于符号“+”之前,或者单元格文本没有符号,则返回原文本。
因此我们可以输入一个公式:=IFERROR(LEFT(A2,FIND("+",A2)-1),A2)
这是一个关于文本字符提取函数left的公式,它嵌套了find函数。
我们可以记住一点,在绝大多数的字符提取场景中,find函数是必用的一个文本函数,因为它的作用就是返回指定字符在文本中的位置。只有得到该字符的位置,才可以继续嵌套其他函数来提取需要的字符。
同时,在这个函数公式中,也使用了iferror函数来进行容错,即当left表达式的结果为错误时,会返回一个指定值,这里设置的是A2,照应之前的一句话,
“单元格文本没有符号,则返回原文本。”
这个函数公式比较简单,我们就不细讲,关于left、find函数的基础语法和用法,可以参见作者专栏《excel100个常见函数快速入门》。
- 接下来提取第3列,即当单元格文本出现两个“+”号,要提取最后一个“+”号后的内容。
这一步我们可以借鉴第1列的提取,left函数是提取字符串左侧数据,那么我们使用right函数,就可以提取字符串的右侧数据。
但提取的关键点在于,文本中包含了两个符号“+”,如果使用常规的find函数表达式,只会返回第1个“+”所在的位置。因此我们需要创建一个嵌套公式。
如下完整公式:
=IFERROR(RIGHT(A2,LEN(A2)-FIND("+",A2,FIND("+",A2,1)+1)),"")
iferror函数我们先不管,那right函数是提取右侧数据,有两个参数,第1参数是文本,第2参数是提取的字符数量。
在第2参数我们的表达式为:LEN(A2)-FIND("+",A2,FIND("+",A2,1)+1)
用文字来表达,就是A2的字符长度减去符号“+”在文本中的位置,而重点来了。
FIND("+",A2,1)的含义是从第1个字符开始查找“+”号在文本中的位置,这里结果是7,加上1就等于8;接着我们将这个表达式嵌套入另一个find函数中,就如同上面的“FIND("+",A2,FIND("+",A2,1)+1)”,那么它就等于FIND("+",A2,8),即表示从第8个字符开始查找符号“+”在文本中的位置。
既然是从第8个字符开始,而第1个符号“+”在文本中的位置是7,那么显然是跳过了第1个“+“号,那么继续查找的符号”+“的位置,即是第2个”+“在文本中的位置。
最后用整个文本的字符长度减去第2个”+“号的位置,再使用right函数来提取字符,便得到我们需要的结果。
这个公式的学习点就在于find函数的嵌套,我们也可以思考一下,当文本中出现三次”+“号,要提取第3个符号后的文本,是不是可以嵌套3次find函数呢!?
- 接下来我们再看看第2列的提取,这也是这个场景中,相较要复杂一点的内容。
从下面图中公式就可见一斑了。
先上完整公式:=IFERROR(IF((LEN(A2)-LEN(SUBSTITUTE(A2,"+","")))=2,MID(A2,FIND("+",A2)+1,FIND("+",A2,FIND("+",A2)+1)-FIND("+",A2)-1),RIGHT(A2,LEN(A2)-FIND("+",A2))),"")
在公式中,作者“贴切”地使用不同颜色来标注不同函数或参数的表达。
也确实,公式分为了几个部分,使用了if函数来判断一个条件,即当单元格文本中出现了两次“+”号,那么就提取两个符号之间地字符内容,否则就提取第1个符号后内容;
而提取两个符号间的内容,则使用了mid和find的嵌套函数,整个表达式看起来复杂,其实都是在基础语法上的应用,一层一层剥开来看,还是好理解的。
这里作者只介绍以下if函数条件的设置,因为if函数另外两个参数的表达式,讲来讲去还是那几个函数,大家应该擅于去解析公式中各部分的含义,从函数的基本语法出发。
if函数的条件为:
(LEN(A2)-LEN(SUBSTITUTE(A2,"+","")))=2
有经验的童鞋可能一看到这个公式,就会想到它是查找某个字符在文本中出现的次数。
这里使用了len函数和substitute函数。
len函数是计算字符的长度,substitute函数是替换一个字符为另一个字符,这里是将“+”号替换成空值,而且是全部替换,那么很明显,原文本少去了符号”+“,那么原文本长度减去替换后的文本长度,不就得到了该字符出现的次数!
这仿佛是“偷梁换柱”,是从另一个角度来达到查询的目的,这种思路是很有意思的。
最后我们来看看公式填充后的结果:
那么总结一下,在近段时间多次介绍关于单元格文本中指定字符的提取,这类场景我们所用到的函数基本还是那几个,什么find、mid、left等等,就是这些基础函数,来完成我们的提取任务。
所以,万变不离其宗,打好函数基础,才是解决问题的基石。
最后ps:如果需要文件来练习,可以私信作者,或者加入交流群。
- 上一篇:VBA之替换操作
- 下一篇:AWK基础之RS、ORS与FS、OFS
相关推荐
- selenium(WEB自动化工具)
-
定义解释Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7,8,9,10,11),MozillaF...
- 开发利器丨如何使用ELK设计微服务中的日志收集方案?
-
【摘要】微服务各个组件的相关实践会涉及到工具,本文将会介绍微服务日常开发的一些利器,这些工具帮助我们构建更加健壮的微服务系统,并帮助排查解决微服务系统中的问题与性能瓶颈等。我们将重点介绍微服务架构中...
- 高并发系统设计:应对每秒数万QPS的架构策略
-
当面试官问及"如何应对每秒几万QPS(QueriesPerSecond)"时,大概率是想知道你对高并发系统设计的理解有多少。本文将深入探讨从基础设施到应用层面的解决方案。01、理解...
- 2025 年每个 JavaScript 开发者都应该了解的功能
-
大家好,很高兴又见面了,我是"高级前端进阶",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发。1.Iteratorhelpers开发者...
- JavaScript Array 对象
-
Array对象Array对象用于在变量中存储多个值:varcars=["Saab","Volvo","BMW"];第一个数组元素的索引值为0,第二个索引值为1,以此类推。更多有...
- Gemini 2.5编程全球霸榜,谷歌重回AI王座,神秘模型曝光,奥特曼迎战
-
刚刚,Gemini2.5Pro编程登顶,6美元性价比碾压Claude3.7Sonnet。不仅如此,谷歌还暗藏着更强的编程模型Dragontail,这次是要彻底翻盘了。谷歌,彻底打了一场漂亮的翻...
- 动力节点最新JavaScript教程(高级篇),深入学习JavaScript
-
JavaScript是一种运行在浏览器中的解释型编程语言,它的解释器被称为JavaScript引擎,是浏览器的一部分,JavaScript广泛用于浏览器客户端编程,通常JavaScript脚本是通过嵌...
- 一文看懂Kiro,其 Spec工作流秒杀Cursor,可移植至Claude Code
-
当Cursor的“即兴编程”开始拖累项目质量,AWS新晋IDEKiro以Spec工作流打出“先规范后编码”的系统工程思维:需求-设计-任务三件套一次生成,文档与代码同步落地,复杂项目不...
- 「晚安·好梦」努力只能及格,拼命才能优秀
-
欢迎光临,浏览之前点击上面的音乐放松一下心情吧!喜欢的话给小编一个关注呀!Effortscanonlypass,anddesperatelycanbeexcellent.努力只能及格...
- JavaScript 中 some 与 every 方法的区别是什么?
-
大家好,很高兴又见面了,我是姜茶的编程笔记,我们一起学习前端相关领域技术,共同进步,也欢迎大家关注、点赞、收藏、转发,您的支持是我不断创作的动力在JavaScript中,Array.protot...
- 10个高效的Python爬虫框架,你用过几个?
-
小型爬虫需求,requests库+bs4库就能解决;大型爬虫数据,尤其涉及异步抓取、内容管理及后续扩展等功能时,就需要用到爬虫框架了。下面介绍了10个爬虫框架,大家可以学习使用!1.Scrapysc...
- 12个高效的Python爬虫框架,你用过几个?
-
实现爬虫技术的编程环境有很多种,Java、Python、C++等都可以用来爬虫。但很多人选择Python来写爬虫,为什么呢?因为Python确实很适合做爬虫,丰富的第三方库十分强大,简单几行代码便可实...
- pip3 install pyspider报错问题解决
-
运行如下命令报错:>>>pip3installpyspider观察上面的报错问题,需要安装pycurl。是到这个网址:http://www.lfd.uci.edu/~gohlke...
- PySpider框架的使用
-
PysiderPysider是一个国人用Python编写的、带有强大的WebUI的网络爬虫系统,它支持多种数据库、任务监控、项目管理、结果查看、URL去重等强大的功能。安装pip3inst...
- 「机器学习」神经网络的激活函数、并通过python实现激活函数
-
神经网络的激活函数、并通过python实现whatis激活函数感知机的网络结构如下:左图中,偏置b没有被画出来,如果要表示出b,可以像右图那样做。用数学式来表示感知机:上面这个数学式子可以被改写:...
- 一周热门
- 最近发表
- 标签列表
-
- ps图案在哪里 (33)
- super().__init__ (33)
- python 获取日期 (34)
- 0xa (36)
- super().__init__()详解 (33)
- python安装包在哪里找 (33)
- linux查看python版本信息 (35)
- python怎么改成中文 (35)
- php文件怎么在浏览器运行 (33)
- eval在python中的意思 (33)
- python安装opencv库 (35)
- python div (34)
- sticky css (33)
- python中random.randint()函数 (34)
- python去掉字符串中的指定字符 (33)
- python入门经典100题 (34)
- anaconda安装路径 (34)
- yield和return的区别 (33)
- 1到10的阶乘之和是多少 (35)
- python安装sklearn库 (33)
- dom和bom区别 (33)
- js 替换指定位置的字符 (33)
- python判断元素是否存在 (33)
- sorted key (33)
- shutil.copy() (33)