我需要使用正则表达式从配方数据库中的表单字段中识别一个分数。 成分将以两部分形式输入。第一场是数量,第二场是成分。然后,我需要将字段1分解为其小数组件以输入到数据库中。
可能的条目包括: 1,1 / 2,1,1 / 2和之前的任何一个附加单词,如1杯或1/2汤匙。 我预见的最难的是:[2 28盎司。 cans]其中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盎司罐]问题的任何想法?上面的Regex拉出了2,28,这是不正确的,它只能拉出2,然后其余的(28盎司罐)将是问题1的解决方案有希望找到的另一部分。
答案 0 :(得分: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组将始终包含剩余的文本(成分)。