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

如何修正正则表达式以提取指定商品文本前的数字?

问题解决:提取商品描述前的数字

原代码问题分析

你当前的代码逻辑完全错误:用([0-9]+)拼接fruit_words列表,会生成类似Appels([0-9]+)Bananas([0-9]+)Oranges的正则表达式,这是在匹配水果词之间的数字,而非你需要的水果词前方的数字,所以返回空列表是必然的。

修正后的代码实现

核心思路

构建正则表达式,匹配「数字 + 空格 + 任意一个水果词」的组合,捕获其中的数字部分。为避免水果词含特殊正则字符(比如.、*)导致匹配失败,建议对每个水果词做转义处理。

代码示例

import re

# 示例数据
verdi = "222 Appels Royal Gala 13kg 60/65 Generica PL Klasse I\n33 Bananas Cavendish 10kg"
fruit_words = ["Appels", "Bananas"]

# 构建正则模式:转义每个水果词,用|分隔表示可选,匹配数字+空格+水果词的组合
pattern = r'(\d+)\s+(?:' + '|'.join(re.escape(word) for word in fruit_words) + ')'
number_found = re.findall(pattern, verdi)

print(number_found)  # 输出:['222', '33']

模式说明

  • (\d+):捕获一个或多个数字(这就是你要的目标值)
  • \s+:匹配一个或多个空格(数字和商品词之间的分隔)
  • (?:...):非捕获组,用来包裹所有可选的水果词,避免额外捕获无关内容
  • |.join(...):将水果列表转成「词1|词2|词3」的形式,表示匹配任意一个水果词

补充说明

如果你的发票文本中数字和商品词之间可能存在其他空白字符(比如制表符),可以把\s+换成\s*(匹配0或多个空白),或者[\s\t]+(匹配空格或制表符)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 11:05:20