我需要使用正则表达式从菜谱数据库中的表单字段中识别分数。
成分将被输入到由两部分组成的表单字段中。第一字段是数量,第二字段是成分。然后,我需要将字段一分解为其小数部分以输入到数据库中。
可能的条目包括:
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)
哪种作品。我对正则表达式完全陌生,所以我只进行猜测和检查,而且我很难让它为我工作。
问题#1:我还需要识别单词部分。单词部分也可以是多个单词,例如 2 个大罐头,其中大罐头就是单词部分。上面的正则表达式很好地识别了数字,但我无法找到一种方法来获取表单字段的其余部分。例如,1 1/2 汤匙给了我 1,1,2,但仅此而已,我还需要汤匙。我尝试使用这个正则表达式并使用 len 来削减原始内容,减去前面的分数,但遇到问题,因为 1 / 2 和 1/2 都是允许的,所以无法弄清楚要减去多少个点(1 / 2应该从字符串的前面减去 6,1/2 应该从字符串的前面减去 4,只是看看 1,2 的正则表达式结果,我不知道要减去多少)。
问题 #2:这并不是那么重要,但是关于如何识别 [2 28 盎司罐] 问题有什么想法吗?上面的正则表达式取出 2,28,这是不正确的,它应该只取出 2 个,然后剩下的(28 盎司罐)将是问题 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。Group 1将始终包含金额(作为数字、分数或带分数的数字)并且group 6总是有剩余的文本(成分)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)