1

我需要使用正则表达式从配方数据库中的表单字段中识别一个分数。成分将在两部分表单字段中输入。字段一是数量,字段二是成分。然后,我需要将字段 1 分解为其小数部分以输入到数据库中。

可能的条目包括:1, 1/2, 1 1/2,以及之前的任何带有单词的条目,例如 1 杯或 1/2 汤匙。我预见的最难的是:[2 28 盎司。罐头] 其中 2 是数字,28 盎司。罐头就是这个词。

我发现: (\b[0-9]{1,3}(?:,?[0-9]{3})*(?:.[0-9]{2})?\b) 哪个某种作品。我对 Regex 完全陌生,所以我只进行猜测和检查,我很难让它为我工作。

问题 #1:我还需要识别单词部分。单词部分也可以是多个单词,例如 2 个大罐子,其中大罐子就是单词部分。上面的正则表达式很好地识别了数字,但我想不出一种方法来获取表单字段的其余部分。例如 1 1/2 汤匙给我 1,1,2 但仅此而已,我也需要汤匙。我尝试使用这个正则表达式并使用 len 来减少原始值,减去前面的分数,但是由于 1 / 2 和 1/2 都允许,所以无法确定要减去多少点(1 / 2应该从字符串的前面减去 6,1/2 应该从字符串的前面减去 4,只看 1,2 的正则表达式结果,我不知道要减去多少)。

问题#2:这不是那么重要,但是关于如何识别 [2 28 oz cans] 问题的任何想法?上面的正则表达式拉出 2,28 是不正确的,它应该只拉出 2 个,然后其余的(28 盎司罐头)将是问题 1 的解决方案有望找到的另一部分。

4

1 回答 1

1

这是一个正则表达式,它将匹配混合数字、整数和条目的其余部分(成分,希望有任何无关的数字):

^((\d+( \d+/\d+)?)|(\d+/\d+))( (.+))?$

因此,例如,如果2 28 ounce cans它会匹配:

group 1: 2
group 2: 2
group 3: 
group 4: 
group 5:  28 ounce cans
group 5: 28 ounce cans

您关心的组是 1 和 5。组 1将始终包含数量(作为数字、分数或带分数的数字),第 6 组将始终包含剩余的文本(成分)。

于 2012-06-21T02:24:27.113 回答