【发布时间】:2016-02-09 21:45:54
【问题描述】:
我正在尝试从通过 Kaggle 找到的 OpenFoodFacts 数据集中解析出一列数据。有一个名为“serving_size”的属性,它包含食品包装上显示的任何份量信息。大多数情况下,份量以克 (g) 表示,但通常也有其他文本。我希望能够搜索字符串,找到与克数对应的数字,并将该值提取到自己的字段中。该值不仅仅是一个整数 - 它可能有一个小数。
我是正则表达式的新手,但似乎应该可以搜索“g”字符以及是否可以通过任何数值来提取它们。我发现一些食谱表明这是可能的,但到目前为止,我尝试过的任何方法都没有奏效。在 OpenRefine 文档中,他们给出了使用此正则表达式提取十进制数据的示例:/[-+]?[0-9]+(.[0-9]+)?/,但我没有得到任何变化在我们的场景中工作。我也试过像“value.match(/(.)?(/d+[g]).?/)”这样的命令。我发现我不明白正则表达式应该如何工作 - 当我告诉它“/ d”时,我希望它只会给我返回数值,但情况似乎并非如此 - 它无论字符类型如何,都会给出任何内容。
任何帮助将不胜感激。
以下是数据中的一些示例文本字符串:
serving_size
- 113.5g
- 20g
- 1 cup (227g)
- 4 cookies (15g)
- 13 pieces (39g)
- 1/4 packet (21g) makes 1/2 cup
- 0.75 oz (21g)
- 1 can (12 FL OZ) 355g
- 15.2 fl oz (450g)
- 1 can (355mL)
- 1/4 tsp (1.4g)
- 10 fl oz 1 bottle.
- 20 fl oz
- 1 envelope (21g)
- 1 tbsp (4.5g)
- 45.2g
- 1/2 pack 142.5gms
- 1 carré de chocolat de 20g
- 4 biscottes (≈ 35g) Ce paquet contient 8.5 portions de 4
biscottes.
- 0.33L
- 2galettes 10.5g
- 0.041649313g
- 1 package (79g)
【问题讨论】:
-
我认为您正在寻找
/[-+]?[0-9]+(?:\.[0-9]+)?(?=\s*g)/g。如果您还需要匹配OZ之前的数字,请使用/[-+]?[0-9]+(?:\.[0-9]+)?(?=\s*(?:g|OZ)\b)/ig- 根据需要展开 -
请提供您想要的输出结果。谢谢
-
对不起,我应该更清楚。取上面的前四行,我希望结果返回数字:113.5、20、227、15 等。一旦我得到解析的值,我想我可以使用“toNumber”命令将它转换为数字。对于那些没有任何以克为单位的行(例如 20 液量盎司),我将忽略这些值 - 返回 null 是可以的。
-
我确实尝试了 Wiktor 的建议,但它似乎不起作用。我去看看能不能加个截图来展示一下结果。
标签: regex openrefine