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

如何用正则表达式提取数字及特殊字符前的箱包类型?

提取箱包类型的正则解决方案

需求说明

从以下条目里提取数字、空格、(、[等特殊字符之前的箱包类型:

  • Suitcase 6l
  • Backpack (28kg)
  • Duffel Bag 6kg
  • Purse [3kg]
  • Duffel Bag [25l]
  • Duffel Bag 10l

期望得到唯一的箱包类型列表:

  • Suitcase
  • Backpack
  • Duffel Bag
  • Purse

正确正则表达式

^[\w\s]+?(?=\s*(?:\d|\(|\[))

正则拆解

  • ^:锚定字符串开头,确保从条目起始位置匹配
  • [\w\s]+?:匹配字母、空格组成的箱包名称,+?是非贪婪模式,避免过度匹配到后面的无效字符
  • (?=\s*(?:\d|\(|\[)):正向预查,匹配后面跟着可选空格,再是数字、(或[的位置,以此作为匹配终止的标记

代码示例(Python)

import re

item_list = [
    "Suitcase 6l",
    "Backpack (28kg)",
    "Duffel Bag 6kg",
    "Purse [3kg]",
    "Duffel Bag [25l]",
    "Duffel Bag 10l"
]

pattern = r"^[\w\s]+?(?=\s*(?:\d|\(|\[))"
unique_types = set()

for item in item_list:
    match_result = re.match(pattern, item)
    if match_result:
        unique_types.add(match_result.group().strip())

# 输出去重后的箱包类型
for typ in sorted(unique_types):
    print(f"- {typ}")

原正则问题分析

你之前用的(?i)(\D*^)无法满足需求,原因是:

  • \D*会匹配所有非数字字符,包括(、[这些你想排除的特殊符号
  • ^放在表达式末尾是错误的,它是行首锚定符,位置颠倒导致逻辑混乱

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 01:45:31