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

请求可拆分产品标签与规格的正则表达式(含包装规格)

拆分产品标签与规格的正则表达式方案

我来帮你搞定这个产品字符串拆分的问题——核心挑战确实是区分标签里的数字和规格部分的容量标识,同时还要兼容带包装规格的场景。下面是针对你需求的解决方案:

正则表达式设计思路

我们需要精准定位规格部分的起始点:规格必然以「数字(可带小数点)+ 容量单位(ML/CL/L)」开头,后面可能跟着「数字+PK」的包装规格。利用这个特征,我们可以用非贪婪匹配捕获前面的标签部分,同时精准捕获后面的规格部分。

最终正则模式

^(.*?)\s+(\d+\.?\d*(?:ML|CL|L)(?:\s+\d+PK)?)$

模式拆解

让我们逐个部分解释这个正则的作用:

  • ^:匹配字符串的起始位置,确保我们从开头开始匹配
  • (.*?):非贪婪捕获分组,匹配任意字符直到遇到后面的规格分隔符(空格+规格),这就是我们要的产品标签部分
  • \s+:匹配一个或多个空格,作为标签和规格的分隔符
  • (\d+\.?\d*(?:ML|CL|L)(?:\s+\d+PK)?):捕获规格部分的分组:
    • \d+\.?\d*:匹配容量的数字部分,支持整数(如750、50)和小数(如1.5)
    • (?:ML|CL|L):非捕获分组,匹配容量单位(ML/CL/L,如果你需要兼容小写可以改成(?:ML|ml|CL|cl|L|l))
    • (?:\s+\d+PK)?:可选的非捕获分组,匹配包装规格(如2PK、6PK),?表示这部分是可选的
  • $:匹配字符串的结束位置,确保我们匹配的是完整的规格部分

代码示例(Python)

下面是用Python实现的拆分逻辑,直接可以测试你的示例字符串:

import re

# 定义正则模式
spec_pattern = r'^(.*?)\s+(\d+\.?\d*(?:ML|CL|L)(?:\s+\d+PK)?)$'

# 测试你的示例字符串
product_strings = [
    'PRODUCTA 1909 SUPERIOR GIN 89 PROOF 750ML',
    'PRODUCTB FLAV GIN 70 PROOF VAP 1.5L 2PK',
    'PRODUCTB FLAV GIN 70 PROOF VAP 1.5L 6PK',
    'PRODUCTC FLAV GIN 70 PROOF VAP 50ML 5PK'
]

for prod_str in product_strings:
    match_result = re.match(spec_pattern, prod_str)
    if match_result:
        tag_part = match_result.group(1)
        spec_part = match_result.group(2)
        print(f"原字符串: {prod_str}")
        print(f"产品标签: '{tag_part}'")
        print(f"产品规格: '{spec_part}'")
        print("---")
    else:
        print(f"⚠️ 字符串 {prod_str} 未匹配到规格模式")

输出结果

运行上面的代码后,你会得到完全符合预期的拆分结果:

原字符串: PRODUCTA 1909 SUPERIOR GIN 89 PROOF 750ML
产品标签: 'PRODUCTA 1909 SUPERIOR GIN 89 PROOF'
产品规格: '750ML'
---
原字符串: PRODUCTB FLAV GIN 70 PROOF VAP 1.5L 2PK
产品标签: 'PRODUCTB FLAV GIN 70 PROOF VAP'
产品规格: '1.5L 2PK'
---
原字符串: PRODUCTB FLAV GIN 70 PROOF VAP 1.5L 6PK
产品标签: 'PRODUCTB FLAV GIN 70 PROOF VAP'
产品规格: '1.5L 6PK'
---
原字符串: PRODUCTC FLAV GIN 70 PROOF VAP 50ML 5PK
产品标签: 'PRODUCTC FLAV GIN 70 PROOF VAP'
产品规格: '50ML 5PK'
---

扩展说明

  • 如果你的产品规格单位有小写形式(如ml、l),可以给正则加上不区分大小写的标志:re.match(spec_pattern, prod_str, re.IGNORECASE)
  • 如果包装规格有其他形式(如CASE、BOX),可以修改包装部分的正则为(?:\s+\d+(PK|CASE|BOX))?
  • 非贪婪匹配.*?是关键,它确保我们不会把标签里的内容错误地包含到规格部分里

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:42:14