1

次のような文字列があります。

<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 という数値が得られます。この正規表現の何が問題になっていますか?

4

2 に答える 2

3

ドットの前に 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 桁が必要です。

于 2012-04-04T11:39:38.140 に答える
1

答えは stema によって与えられます。

正規表現エンジンが文字クラスをサポートしている場合、次のようにもう少しコンパクトになる可能性があります。

(\d{1,2}\.?\d{0,2})h\s/\s(\d{1,2}\.?\d{0,2})

\d短縮文字クラスです。[0-9]

于 2012-04-04T11:47:01.550 に答える