Regex - Identify Fractions

寵の児 提交于 2021-02-16 14:54:09

问题


I need to identify a fraction from a form field in a recipe database using a Regex. Ingredients will be entered in a two part form fields. Field one is the amount, Field two is the ingredient. I then need to break field one into its fractional components to input into the database.

Possible entries include: 1, 1/2, 1 1/2, and any of the previous with words attached such as 1 cup, or 1/2 tbsp. the hardest I foresee would be: [2 28 oz. cans] where 2 is the number, and 28 oz. cans would be the word.

I have found: (\b[0-9]{1,3}(?:,?[0-9]{3})*(?:.[0-9]{2})?\b) which sort of works. I am completely new to Regex, so I am working on guess and check only, and I am having a hard time making it work for me.

Problem #1: I need to identify the word part as well. The word part can be multiple words as well, such as 2 large cans, where large cans would be the word part. The above Regex identifies the numbers very well, but I cant figure out a way to grab the rest of the form field. For example 1 1/2 tbsp gives me 1,1,2 but that is all, and I need tbsp as well. I tried to use this Regex and use len to cut the original down, subtracting the fraction off the front, but had problems since 1 / 2 and 1/2 are both allowed, so cant figure out how many spots to subtract (1 / 2 should subtract 6 from the front of the string, 1/2 should subtract 4 from the front of the string, and just looking at the regex results of 1,2 I cant tell howmany to subtract).

Problem #2: This isnt so important, but any ideas on how to identity the [2 28 oz cans] problem? The above Regex pulls 2,28 out which is not correct, it shoudl only pull 2 out and then the rest (28 oz cans) would be the other part that the solution to problem 1 will hopefully find.


回答1:


Here's a regex that will match mixed numbers, whole numbers, and the rest of the entry (the ingredient, hopefully with any extraneous numbers):

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

So for example if had 2 28 ounce cans it would match:

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

The groups you care about are 1 & 5. Group 1 will always contain the amount (as a number, fraction, or number with a fraction) and group 6 will always have the remaining text (the ingredient).



来源:https://stackoverflow.com/questions/11130669/regex-identify-fractions

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!