Python中如何检测含特定字符(如10g)的数字并提取含克(g)和百分比(%)的配料?
我来帮你解决这个问题——你的代码问题出在直接用字符串字面量的in操作符去匹配正则模式,而不是用正则引擎处理匹配逻辑,这才导致带g的配料项没被检测出来。
问题根源
你当前代码里的'\d+\s*g' in s,是在检查字符串s里是否包含字面量的'\d+\s*g'(也就是字符d、+、\、s、*、g连在一起的子串),而不是匹配"数字+可选空格+g"的实际模式,这完全不符合你的需求。
解决方案
我们需要借助Python的re模块来做正则匹配,替换掉错误的字符串包含检查。具体实现如下:
- 先导入
re模块(如果还没导入的话) - 修改
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
相关产品推荐
相关产品推荐

