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

正则表达式匹配含可选括号组文本的问题求助

正则表达式适配带/不带括号的编号提取需求

问题背景

现有正则可正常提取无括号的编号数据,但遇到带括号的编号时失效;修改后的正则虽能匹配带括号数据,但会产生多余分组且无法兼容无括号文本:

第一版正则(仅支持无括号)

([A-Z]{2,}-\d+)\(?\s.?([a-zA-Z]+\s?[a-zA-Z]+)\s\d*-\d*\s([a-zA-Z]+\s?[a-zA-Z]+\s?[a-zA-Z]+)

测试数据:

Design No. TAHN-7075 Natural Gray 0997-101 White 0911-101

输出分组:

  1. TAHN-7075
  2. Natural Gray
  3. White

修改版正则(仅支持带括号,有多余分组)

([A-Z]{2,}-\d+\(([^\)]+)\))\(?\s.?([a-zA-Z]+\s?[a-zA-Z]+)\s\d*-\d*\s([a-zA-Z]+\s?[a-zA-Z]+\s?[a-zA-Z]+)

测试数据:

Design No. TAHN-7082(CS-02) Natural Gray 0997-101 White 0911-101

输出分组:

  1. TAHN-7082(CS-02)
  2. CS-02
  3. Natural Gray
  4. Natural Gray

解决方案

使用以下正则,可同时兼容带/不带括号的编号,且无多余分组:

([A-Z]{2,}-\d+(?:\([^)]+\))?)\s+([a-zA-Z]+\s[a-zA-Z]+)\s\d*-\d*\s+([a-zA-Z]+(?:\s[a-zA-Z]+)?)

正则说明

  • ([A-Z]{2,}-\d+(?:\([^)]+\))?):捕获核心编号部分,其中(?:\([^)]+\))?是可选非捕获组,匹配括号及内部内容([^)]+匹配括号内任意非右括号字符),?表示该部分可存在或不存在,非捕获组避免生成多余分组
  • \s+:匹配一个或多个空格,替代原正则中模糊的\(?\s.?,避免匹配无关字符
  • ([a-zA-Z]+\s[a-zA-Z]+):捕获第一个颜色(如Natural Gray)
  • \s\d*-\d*\s+:匹配中间的数字区间(如0997-101)及前后空格
  • ([a-zA-Z]+(?:\s[a-zA-Z]+)?):捕获第二个颜色,支持单/双词(如White或Light Gray)

测试验证

无括号数据测试

输入:

Design No. TAHN-7075 Natural Gray 0997-101 White 0911-101

输出分组:

  1. TAHN-7075
  2. Natural Gray
  3. White

带括号数据测试

输入:

Design No. TAHN-7082(CS-02) Natural Gray 0997-101 White 0911-101

输出分组:

  1. TAHN-7082(CS-02)
  2. Natural Gray
  3. White

该正则可直接在正则测试网站调试,移植到VBA时无需调整核心语法(VBA支持非捕获组(?:...))。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 16:42:46