返回

正则表达式从食谱中解析食材信息 | 食谱分析 | 提取技巧

Android

利用正则表达式从食谱中解析食材信息

问题

在处理烹饪食谱时,提取食材清单中复杂成分字符串中的结构化数据至关重要。正则表达式(Regex)是一种强大的工具,可以帮助我们从字符串中高效地提取信息。

我们遇到了一个正则表达式问题,无法正确解析 "1/2 cups water" 这样的字符串。正则表达式无法识别 "cups" 作为单位,因为只匹配了单数形式 "cup"。

改进的正则表达式

为了解决这个问题,我们修改了单位分组以匹配单位的复数形式:

val unitRegex = """(\d+(\s+\d+/\d+)?)?\s*(tbsp|tsp|lbs|lb|pinch|stalk|stalks|oz|cup|cups|pint|pints|quart|quarts|gallon|gallons|ml|milliliter|milliliters|l|liter|liters|g|gram|grams|kg|kilogram|kilograms|fl oz|fluid ounce|fluid ounces|teaspoon|teaspoons|tablespoon|tablespoons)?(\s+(cup|cups|pint|pints|quart|quarts|gallon|gallons|ml|milliliter|milliliters|l|liter|liters|g|gram|grams|kg|kilogram|kilograms|fl oz|fluid ounce|fluid ounces|teaspoon|teaspoons|tablespoon|tablespoons))?""".toRegex()

示例匹配

改进后的正则表达式可以正确匹配各种格式的食材字符串,例如:

  • "1½ cups mayonnaise"
  • "¾ tbsp Dijon mustard"
  • "¾ tbsp cider vinegar"
  • "1 pinch salt"
  • "1 pinch ground black pepper"
  • "1½ lbs cauliflower"
  • "salt and ground black pepper"
  • "½ cup water"
  • "5 oz. bacon"
  • "3 (4¼ oz.) celery stalks"
  • "½ (2 oz.) red onion"
  • "2 tbsp fresh chives"

结论

通过修改正则表达式以匹配单位的复数形式,我们显著提高了它从食谱中准确提取食材信息的准确性。这个改进后的正则表达式可以作为处理烹饪食谱中复杂食材字符串的宝贵工具。

常见问题解答

1. 我可以使用这个正则表达式来解析其他类型的文本数据吗?

该正则表达式专门针对烹饪食谱中食材成分字符串。对于其他类型的文本数据,可能需要进行修改或创建新的正则表达式。

2. 如何测试我的正则表达式是否匹配我的文本数据?

可以使用在线正则表达式测试工具或在编程语言中使用正则表达式函数来测试正则表达式的匹配情况。

3. 如何使用改进后的正则表达式在我的程序中?

一旦您将正则表达式作为字符串字面量创建,就可以在您的程序中使用 Regex.matchEntire() 函数来匹配文本数据并提取捕获组。

4. 如果我遇到其他匹配问题怎么办?

如果您遇到额外的匹配问题,请仔细检查您的正则表达式以确保其正确定义。您还可以使用正则表达式调试工具或向其他程序员寻求帮助。

5. 有没有更好的方法来从食谱中提取食材信息?

除了使用正则表达式之外,还有其他方法可以从食谱中提取食材信息,例如使用自然语言处理(NLP)技术或专门的食谱解析器库。