2016-06-15 39 views
2

私は小数点以下の末尾のゼロを切り捨てるための単一の正規表現(Java用)を作成しようとしています。例えば末尾のゼロを切り捨てる正規表現

  • 50.000 50.05
  • -5→-5
  • 50→50
  • 5.5

5.5→アイデアがである50

  • 50.500→50.5
  • 50.0500→→可能な最もコンパクトな形式の実数(または整数)を表します。

    は、ここで私が構築してきたものだ:私が切り捨て数の文字列をキャプチャする$1を使用してい

    ^(-?[.0-9]+?)\.?0+$ 
    

    上記のパターンの問題は、50が5に切り捨てられてしまうことです。0+.(小数点)に続く必要があることを表現する方法が必要です。
    私はネガティブバックを使ってみましたが、一致するものは見つかりませんでした。

  • +0

    '^( - ?[.0-9] +?)(\ .0 +)?$' –

    +0

    そうです:[regex 101](https:// regex101 .com/r/aJ5kC1/1)? –

    +1

    あなたはどの言語を使っていましたか? –

    答えて

    2

    最適な解決策は、そのタスクに組み込みの言語固有のメソッドを使用することです。

    あなたがそれらを使用することができない場合は、

    ^(-?\d+)(?:\.0+|(\.\d*?)0+|\.+)?$ 
    

    を使用し、$1$2と交換することができます。

    regex demoを参照してください。それに応じて正規表現を調整します。ここでの説明は次のとおりです。

    • ^ - 文字列の先頭
    • (-?\d+) - グループ1 1つのまたは0マイナス記号をキャプチャして、1桁以上
    • (?:\.0+|(\.\d*?)0+|\.+)? - オプション(マッチ1または0回後続?)非捕捉基が3つの代替と一致する:
      • \.0+ - 小数点1+ゼロ
      • 01と続きます
      • (\.\d*?)0+ - グループ2任意の0+桁のドットを取り込むが、できるだけ少ないと1+ゼロ
      • \.+マッチング - (を必要としない場合オプションのブランチを、あなたはそれを削除することは) - 末尾のドット(Sに一致します)
    • $ - 文字列の最後。

    Java demo:トリックを行う必要があり、一般的な正規表現のために

    String s = "50.000\n50\n50.100\n50.040\n50.\n50.000\n50.500\n50\n-5"; 
    System.out.println(s.replaceAll("(?m)^(-?\\d+)(?:\\.0+|(\\.\\d*?)0+|\\.+)?$", "$1$2")); 
    // => [50, 50, 50.1, 50.04, 50, 50, 50.5, 50, -5] 
    
    +0

    ここに[更新されたデモ](https://regex101.com/r/nF6rY3/2)リンクがあります。 –

    +0

    @WingPoon:入力が '-5'の場合はどうなるでしょうか?そこに小数部はありません。私が覚えている限り、小数点以下の桁の*を削除する必要がありますか、またはあなたの心を変えて、今度は末尾のゼロまですべてマッチさせたいですか? –

    +0

    要件を質問に追加する必要があります。 ['^( - ?\ d +)(?:\ .0+ |(\。\ d *?)0+ | \。+)?$'](https://regex101.com/r/wH5qA8/) 1)。あなたが使っているメソッド/コードは何ですか? –

    1

    ^\d+?0*\.??\d*?(?=0*?[^\d]*$)

    あなたの境界があるべきものは何でもしてキャレットとドル記号を置き換えることができます。それらはあなたの番号の周りに期待するもので置き換えることができます。基本的に

    :任意の数の

    /d+?非欲張りマッチは小数点ため

    \.*??任意一致(マッチを開始するために、少なくとも1個が必要)。 0出現

    \d*? (?=0*?[^\d]*$)一致することを好む - 数の非欲張りマッチしますが、非数

    EDITによって進行する0で停止する:私はちょうど元の式にもトリミング実現整数の最後のゼロは、これは動作するはずです。私はそれをキャッチするためにオプション0マッチを追加しました

    関連する問題