次のような文字列があります。
<br><b>224h / 15.45 verbuchte Stunden</b>
数値を抽出したいので、次の正規表現を作成しました。
([0-9]\.?[0-9]{0,2})h\s\/\s([0-9]\.?[0-9]{0,2})
しかし、前の文字列では、15.45 ではなく 224 と 15 という数値が得られます。この正規表現の何が問題になっていますか?
次のような文字列があります。
<br><b>224h / 15.45 verbuchte Stunden</b>
数値を抽出したいので、次の正規表現を作成しました。
([0-9]\.?[0-9]{0,2})h\s\/\s([0-9]\.?[0-9]{0,2})
しかし、前の文字列では、15.45 ではなく 224 と 15 という数値が得られます。この正規表現の何が問題になっていますか?
ドットの前に 1 桁しか使用できないためです。
これを試してみてください{1,2}
。ドットの前に数量詞として使用しました。必要に応じて変更してください。おそらく+
より良い選択でしょう。1つ以上を許可します。
([0-9]\.?[0-9]{0,2})h\s\/\s([0-9]{1,2}\.?[0-9]{0,2})
より良い正規表現はこれかもしれません
([0-9]+(?:\.[0-9]{1,2})?)h\s*\/\s*([0-9]+(?:\.[0-9]{1,2})?)
ここでは、完全な小数部分をオプションにしました。ドットの後に少なくとも 1 桁、最大で 2 桁、ドットの前に最小 1 桁が必要です。
正規表現エンジンが文字クラスをサポートしている場合、次のようにもう少しコンパクトになる可能性があります。
(\d{1,2}\.?\d{0,2})h\s/\s(\d{1,2}\.?\d{0,2})
\d
の短縮文字クラスです。[0-9]