1

正規表現を使用して、レシピ データベースのフォーム フィールドから分数を特定する必要があります。材料は 2 つの部分からなるフォーム フィールドに入力されます。フィールド 1 は量、フィールド 2 は成分です。次に、フィールド 1 を分数コンポーネントに分割して、データベースに入力する必要があります。

可能なエントリには、1、1/2、1 1/2、および 1 カップ、または 1/2 tbsp などの単語が付いた前のいずれかが含まれます。私が予測する最も難しいものは次のとおりです。[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 を引く必要があります。

問題 2: これはそれほど重要ではありませんが、[2 28 オンスの缶 2 個] の問題を特定する方法についてのアイデアはありますか? 上記の正規表現は 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 に答える