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

Python中如何检测含特定字符(如10g)的数字并提取含克(g)和百分比(%)的配料?

我来帮你解决这个问题——你的代码问题出在直接用字符串字面量的in操作符去匹配正则模式,而不是用正则引擎处理匹配逻辑,这才导致带g的配料项没被检测出来。

问题根源

你当前代码里的'\d+\s*g' in s,是在检查字符串s里是否包含字面量的'\d+\s*g'(也就是字符d、+、\、s、*、g连在一起的子串),而不是匹配"数字+可选空格+g"的实际模式,这完全不符合你的需求。

解决方案

我们需要借助Python的re模块来做正则匹配,替换掉错误的字符串包含检查。具体实现如下:

  1. 先导入re模块(如果还没导入的话)
  2. 修改apply里的lambda函数,用re.search()来检测每个配料项是否满足两个条件之一:
    • 匹配\d+\s*g模式(数字+可选空格+g)
    • 包含%字符
完整代码示例
import re
import pandas as pd

# 模拟你的输入数据(示例)
df = pd.DataFrame({
    'ingredients_text': [
        ['无关文本', ' jar 312g b ingrédiehb: eau', ' purée de )ingembre (1 b%)', ' tarnain (8%)', ' ail en 3%)', '无匹配项']
    ]
})

# 修改后的筛选逻辑
df['ingredient'] = df['ingredients_text'].apply(
    lambda x: [s for s in x if re.search(r'\d+\s*g', s) or '%' in s]
)

# 查看结果
print(df['ingredient'].iloc[0])
输出结果

运行代码后,会得到你期望的结果:

[' jar 312g b ingrédiehb: eau', ' purée de )ingembre (1 b%)', ' tarnain (8%)', ' ail en 3%)']
额外说明
  • re.search(r'\d+\s*g', s):r表示原始字符串,避免转义字符的干扰;\d+匹配1个或多个数字,\s*匹配0个或多个空格,g匹配字母g,这样就能精准识别带重量单位g的配料项。
  • 对于%的检查,直接用'%' in s就足够了,因为不需要复杂匹配,只要确认字符存在即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 14:07:28