2

機能するかさばる .net 正規表現を作成しましたが、非常に非効率的です。もっと凝縮した書き方があると思いますが、見つけられないようです。

私がする必要があること:

  • 正と負の整数に一致
  • 小数点の前に数字があるかどうかに関係なく、正と負の小数に一致します
  • WPFアプリケーションで使用されているため、.NETで機能します

任意のサンプル文字列からの一致の例:

  • 「7in」から「7」
  • 「-4mm」から「-4」
  • 「.345」から「.345」
  • 「-.43cm」から「-.43」
  • 「$0.16」から「0.16」
  • "-10.04" "-10.04"

私が避ける必要があるもの:

  • 負の範囲内の 2 番目の数値に
    一致 *例: 「1000-3500 RPM」の「-3500」に一致 (1000 と 3500 に一致する必要があります)

私の正規表現:

(?<![0-9])(-)\.\d+|(?<![0-9])(-)\d+\.\d+|(?<![0-9])(-)\d+|\.\d+|\d+\.\d+|\d+

内訳:

?<![0-9])(-)\.\d+- 小数点の前に数字がない負の小数で、ダッシュの前に数字がないことを確認します

また

(?<![0-9])(-)\d+\.\d+- 小数点の前に数字がある負の小数。ダッシュの前に数字がないことを確認します

また

?<![0-9])(-)\d+- ダッシュの前に数字がない負の整数

また

\.\d+- 前に数字がない正の小数を見つける

また

\d+\.\d+- 数字が前にある正の小数を見つける

また

\d+- 正の整数を見つける

今、私が理解していることから、これはより少ない「OR」セグメントに結合できるはずです。少なくとも、正と負のケースと、おそらく小数点以下のオプションの数字を組み合わせることができると思います。パフォーマンスの向上は大歓迎です。

ありがとう。

4

3 に答える 3

0

これはどう-?(\d*\.)?\d+ですか?

于 2013-08-02T16:35:46.563 に答える
0

これは仕事をするように見えます:(?<![0-9])-?\.?([0-9]+)?\.?[0-9]+

ここでテスト済み

編集- 少し凝縮:(?<![0-9])-?\.?[0-9]*\.?[0-9]+

ここでテスト済み

于 2013-08-02T16:49:03.570 に答える