You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在电子表格中提取字符串中的所有特定子字符串?

Google Sheets 解决方案

方法1:提取所有匹配项并拆分到多列

假设待匹配的子字符串列表存放在Sheet2!A1:A30,目标字符串在A2单元格,使用以下公式:

=ARRAYFORMULA(IFERROR(SPLIT(REGEXREPLACE(A2,"\b(?!("&TEXTJOIN("|",TRUE,Sheet2!A1:A30)&"))[^\.]+(\.|$)","$1"),".",TRUE,FALSE)))

逻辑说明:

  • TEXTJOIN("|",TRUE,Sheet2!A1:A30):将子字符串列表拼接成正则兼容的string1|string2|...模式
  • 正则部分\b(?!(匹配列表))[^\.]+(\.|$):匹配所有不在列表中的子串,将其替换为句点(或字符串结尾),最终保留的内容仅为匹配的子串和分隔句点
  • SPLIT(..., ".", TRUE, FALSE):按句点拆分结果,自动忽略空值,拆分到不同列

方法2:提取所有匹配项合并到单个单元格

如果不需要拆分到列,用TEXTJOIN合并结果:

=TEXTJOIN(", ", TRUE, ARRAYFORMULA(IFERROR(SPLIT(REGEXREPLACE(A2,"\b(?!("&TEXTJOIN("|",TRUE,Sheet2!A1:A30)&"))[^\.]+(\.|$)","$1"),".",TRUE,FALSE))))

简化版正则方案

如果子字符串无特殊字符,也可以用更直接的替换方式保留匹配项:

=SPLIT(REGEXREPLACE(A2,".*?\b("&TEXTJOIN("|",TRUE,Sheet2!A1:A30)&")\b|.+","$1 ")," ",TRUE,FALSE)

逻辑说明:

  • 匹配每个符合条件的子串并保留,其余内容替换为空格
  • 最后按空格拆分,自动过滤空值得到所有匹配项

Excel 365 / LibreOffice Calc 解决方案

合并所有匹配项到单个单元格

假设匹配列表在Sheet2!A1:A30,目标字符串在A2:

=TEXTJOIN(", ", TRUE, FILTER(Sheet2!A1:A30, ISNUMBER(SEARCH("."&Sheet2!A1:A30&".", "."&A2&"."))))

逻辑说明:

  • ."&Sheet2!A1:A30&"." 和 ."&A2&".":用句点包裹匹配项和目标字符串,避免部分匹配(比如防止"ABC"匹配"ABCD")
  • ISNUMBER(SEARCH(...)):判断匹配项是否存在于目标字符串中
  • FILTER:筛选出所有存在的匹配项,TEXTJOIN合并为字符串

拆分到多列(Excel 365)

直接用FILTER会自动溢出到右侧列:

=FILTER(Sheet2!A1:A30, ISNUMBER(SEARCH("."&Sheet2!A1:A30&".", "."&A2&".")))

核心思路
  1. 动态生成正则模式:通过TEXTJOIN将外部列表转为正则的或模式,避免手动写30个字符串的正则
  2. 过滤非匹配内容:利用正则替换删除所有不需要的子串,仅保留目标匹配项
  3. 批量匹配筛选:Excel/LibreOffice通过FILTER+SEARCH组合,直接从列表中筛选出存在于目标字符串的项,无需正则

内容的提问来源于stack exchange,提问作者kq76

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 16:40:38