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

如何编写适配分组缺失场景的动态正则表达式?

固定句式的多分组提取正则解决方案

推荐使用以下正则表达式,可适配分组缺失或为空的场景:

^(.*?) is eating a (.*?)(?: by (.*?)(?: at (.*))?)?$

正则拆解

  • ^:锚定字符串开头,确保匹配从起始位置开始
  • (.*?):第一个捕获组,提取[name],非贪婪匹配到is eating a之前的内容
  • is eating a:匹配固定句式的中间标识
  • (.*?):第二个捕获组,提取[item],非贪婪匹配到by之前(若存在),否则匹配对应空内容
  • (?: by (.*?)(?: at (.*))?)?:非捕获可选块,包裹by和at相关内容,末尾?表示整个块可缺失:
    • by:匹配固定前缀by
    • (.*?):第三个捕获组,提取[by name],非贪婪匹配到at之前(若存在),否则匹配到字符串结尾
    • (?: at (.*))?:嵌套非捕获可选块,包裹at相关内容:
      • at:匹配固定前缀at
      • (.*):第四个捕获组,提取[at name],匹配at之后的所有内容

示例验证

针对你提供的3条字符串,捕获结果如下:

  1. 输入:Rafael C. is eating a Burger by McDonalds at Beach
    捕获分组:["Rafael C.", "Burger", "McDonalds", "Beach"]
  2. 输入:David K. is eating a Burger by McDonalds
    捕获分组:["David K.", "Burger", "McDonalds", ""](注:部分正则引擎未匹配到的分组会返回undefined,可通过业务逻辑转为空字符串)
  3. 输入:John G. is eating a by at House
    捕获分组:["John G.", "", "", "House"]

如果需要更强的扩展性(比如适配仅存在at块的场景),可使用拆分后的可选块版本:

^(.*?) is eating a (.*?)(?: by (.*?))?(?: at (.*))?$

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 19:54:41