如何用正则表达式提取数字及特殊字符前的箱包类型?
提取箱包类型的正则解决方案
需求说明
从以下条目里提取数字、空格、(、[等特殊字符之前的箱包类型:
- 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
相关产品推荐
相关产品推荐

