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

如何编写正则表达式将多个单词捕获到独立指定分组

正则捕获同分类多单词方案

问题本质

你当前使用的正则(category \b(\w+)\b )((\b\w+\b)+)无法拿到同分类下所有单词,是正则捕获组的默认机制导致:重复匹配的捕获组只会保留最后一次匹配的内容,最终你只会拿到每个分类下最后一个单词(orange/duck),前面的pear、beef都会被覆盖。

待匹配的目标文本如下:

category fruits pear orange
category meat beef duck

需求是将pear orange、beef duck这类同属一个分类的多个单词,捕获到独立分组中。

可用正则方案

方案1:支持\G锚点的引擎(PCRE、Python、Java、.NET等)

使用连续匹配锚点\G逐个捕获分类下的条目,不会出现内容覆盖,正则写法:

(?:^category\s+(\w+)|(?!^)\G)\s+(\w+)

分组规则:

  • 分组1:捕获分类名称,即fruits/meat
  • 分组2:每执行一次匹配,就捕获一个当前分类下的条目,依次得到pear、orange、beef、duck,所有条目独立捕获无覆盖

匹配逻辑:

  • 非捕获组分两个分支:要么匹配行首的category + 分类名作为匹配起点,要么从上一次匹配结束的位置继续向后匹配,不会跨分类串匹配
  • 每次匹配自动捕获后方紧跟的一个单词到分组2,直到当前行末尾结束

方案2:不支持\G锚点的引擎(如旧版JavaScript)

先匹配整行拿到分类名和对应所有条目的整段文本,再做简单拆分即可,正则写法:

^category\s+(\w+)\s+(.+)$

分组规则:

  • 分组1:捕获分类名称
  • 分组2:捕获当前分类下所有条目的整段字符串,拿到结果后用空白符\s+做分隔符拆分,就能得到独立的条目单词列表

注意事项

正则本身不支持单个捕获组在一次匹配中存储多个不覆盖的值,不要尝试写固定数量的捕获组适配可变长度的条目列表,要么用\G连续匹配逐个捕获,要么先抓整段内容再做拆分,两种方案都能满足需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 22:09:39