Excel字符串处理:如何删除两个下划线间的指定内容并保留其余部分?
可行的Excel公式方案
针对你要删除两个下划线之间特定内容的需求,这里给几个通用的公式,适配不同Excel版本:
方法1:兼容所有Excel版本(无函数版本限制)
假设原字符串在单元格D4,用以下公式:
=LEFT(D4,FIND("_",D4,FIND("_",D4)+1))&RIGHT(D4,LEN(D4)-FIND("@",SUBSTITUTE(D4,"_","@",3)))
原理:
- 先定位第二个下划线的位置,截取左边部分得到
category_topic1_ - 把第三个下划线替换成特殊符号
@,定位这个符号的位置后,截取从第四个下划线开始的右侧部分得到4 - 拼接两部分就得到目标结果
方法2:用XML拆分筛选(Excel 2013及以上)
如果你的Excel支持FILTERXML函数,可以用这个更简洁的公式:
=TEXTJOIN("_",TRUE,FILTERXML("<a><b>"&SUBSTITUTE(D4,"_","</b><b>")&"</b></a>","//b[position()!=3]"))
原理:
- 把原字符串按下划线拆分成XML节点
- 筛选排除第3个节点(也就是你要删除的
sports/business这类内容) - 用下划线把剩余节点拼接起来
方法3:Excel 365动态数组公式
如果你用的是Excel 365,借助动态数组函数可以更直观:
=TEXTJOIN("_",TRUE,LET(x,TEXTSPLIT(D4,"_"),CHOOSEROWS(x,{1,2,4})))
原理:
- 用
TEXTSPLIT把字符串按下划线拆分成数组 - 用
CHOOSEROWS选取第1、2、4个元素 - 最后用
TEXTJOIN拼接成目标字符串
为什么你之前的公式失败?
你之前的公式依赖特定开头_s来标记位置,但你的中间内容开头并不固定(比如business开头是_b),所以这个公式只能处理以_s开头的中间内容,通用性不足,自然无法适配所有情况。
内容的提问来源于stack exchange,提问作者Jay Tee
相关产品推荐
相关产品推荐

