如何用Excel函数提取Description列中的M50、P10类目标文本?
Excel提取指定格式文本的解决方案
方法1:FILTERXML+SUBSTITUTE+TEXTJOIN组合(兼容Excel 2013及以上)
假设目标文本在A2单元格,在B2输入以下公式(Excel 365/2021直接回车,旧版本需按Ctrl+Shift+Enter执行数组运算):
=TEXTJOIN(",",TRUE,FILTERXML("<t><s>"&SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A2,"-","</s><s>"),"_","</s><s>"),".","</s><s>")&"</s></t>","//s[starts-with(.,'M') or starts-with(.,'P') and number(substring(.,2))]"))
逻辑拆解:
- 三次
SUBSTITUTE将文本中的-、_、.替换为XML分隔标签,把原文本拆成独立的节点片段 FILTERXML通过XPath规则筛选:仅保留以M或P开头、且第二个字符起为数字的片段,自动剔除.0%这类无关后缀TEXTJOIN将筛选出的结果用逗号拼接成最终字符串
方法2:Excel 365专属简化版(TEXTSPLIT+FILTER+TEXTJOIN)
如果使用Excel 365/2021,可采用更简洁的写法:
=TEXTJOIN(",",TRUE,FILTER(TEXTSPLIT(A2,{"-","_","."}),LEFT(TEXTSPLIT(A2,{"-","_","."}),1)={"M","P"}+ISNUMBER(--MID(TEXTSPLIT(A2,{"-","_","."}),2,99))))
逻辑拆解:
TEXTSPLIT直接用多个分隔符将文本拆分为数组FILTER筛选数组中以M/P开头、后续为数字的元素TEXTJOIN拼接筛选结果
补充:精准匹配固定格式(如MXX/PXX)
如果目标格式固定为M+数字或P+数字(无其他后缀),可调整FILTERXML的XPath规则实现精准提取:
=TEXTJOIN(",",TRUE,FILTERXML("<t><s>"&SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A2,"-","</s><s>"),"_","</s><s>"),".","</s><s>")&"</s></t>","//s[matches(.,'^M\d+$|^P\d+$')]"))
内容的提问来源于stack exchange,提问作者Raghuveer S
相关产品推荐
相关产品推荐

