質問
分数または整数と分数のCLR正規表現が必要です
1/2
は正しい
12 2/3
も正しい
およびマイナス記号は、任意の数の直前にポップアップできます。
最初に-?([0-9] *)?-?[0-9] + \ /-?[0-9] +
を思いつきましたが、< code> 2/7 12 も例です。
解決
まあ、その正規表現は2つの部分、(オプションの)整数になります:
(:?-?\d+ )?
および小数部:
-?\d+/-?\d+
そして、完全な文字列と一致する必要があります。 so:
^(:?-?\d+ )?-?\d+/-?\d+$
少しテスト:
PS> $re=[regex]'^(:?-?\d+ )?-?\d+/-?\d+
ただし、これにより、&quot; -12 -2 / -3&quot;
、または&quot; 1 -1 / 2&quot;
のように、非常に理にかなっています。
ETA:元の正規表現も機能します。文字列の開始と終了のアンカーが不足していました(それぞれ ^
と $
)。それらを追加すると正しく動作します。
PS> "1/2","12 1/2","-12 2/3","-5/8","5/-8"|%{まあ、その正規表現は2つの部分、(オプションの)整数になります:
(:?-?\d+ )?
および小数部:
-?\d+/-?\d+
そして、完全な文字列と一致する必要があります。 so:
^(:?-?\d+ )?-?\d+/-?\d+$
少しテスト:
<*>
ただし、これにより、&quot; -12 -2 / -3&quot;
、または&quot; 1 -1 / 2&quot;
のように、非常に理にかなっています。
ETA:元の正規表現も機能します。文字列の開始と終了のアンカーが不足していました(それぞれ ^
と $
)。それらを追加すると正しく動作します。
-match $re} | gu
True
ただし、これにより、&quot; -12 -2 / -3&quot;
、または&quot; 1 -1 / 2&quot;
のように、非常に理にかなっています。
ETA:元の正規表現も機能します。文字列の開始と終了のアンカーが不足していました(それぞれ ^
と $
)。それらを追加すると正しく動作します。
他のヒント
同様の要件がありましたが、10進数も一致させたかったのです。 次の正規表現を思いつきました
^-?(?<WholeNumber>\d+)(?<Partial>(\.(?<Decimal>\d+))|(/(?<Denomiator>\d+))|(\s(?<Fraction>\d+/\d+)))?$
または名前付きグループが必要ない場合はこれだけ
^-?\d+((\.\d+)|(/\d+)|(\s\d+/\d+))?$
検証から10進数を削除するには、短縮されます
^-?\d+((/\d+)|(\s\d+/\d+))?$
これが誰かを助けることを願っています!
これを試してください。整数ではなく単一の小数部のみ
/^\d{1}\/?\d{1}$/