2017-03-01 10 views
1

マッチャーの一部だけを元の文字列から削除するには、正規表現パターンを書くのを手助けする必要があります。正規表現のマッチャーの部分を削除する

元の文字列:2017-02-15T12:00:00.268+00:00

予想される文字列:2017-02-15T12:00:00+00:00

予想される文字列は、ミリ秒単位ですべてのものを削除します。 (:[0-5][0-9])\.[0-9]{1,3}

私は、ドットの後に来るすべてのもの、私はいくつかの時間フィールドからのみミリ秒を削除していますことを確認するために、この正規表現をする必要はありません。

私の正規表現パターンは次のようになります。しかし、上記の正規表現を使用して、私はまた、分の部分を削除しています。提案して助けてください。

+1

を置き換えるための$ 1と$変数2を使用することです。 –

+0

申し訳ありませんもっと詳しく説明できますか? –

+0

はい、[こちらをご覧ください](http://ideone.com/oVX1mr)([regex demo](https://regex101.com/r/hzt059/1))。 –

答えて

1

あなたのパターンで(...)capturing groupを定義している、とあなたは交換が行われた後に存在する文字列の一部を持っていると思います。このキャプチャに保存されている値にbackreferenceを使用するだけです。それは$1で行うことができます。

String s = "2017-02-15T12:00:00.268+00:00"; 
String res = s.replaceFirst("(:[0-5][0-9])\\.[0-9]{1,3}", "$1"); 
System.out.println(res); // => 2017-02-15T12:00:00+00:00 

Java demoregex demoを参照してください。

置換パターンの$1は、正規表現エンジンに、マッチオブジェクトデータのIDが1であるキャプチャされたグループを検索するよう指示します。あなたが唯一のエスケープされていない括弧(1つのキャプチャグループ)の1ペアを持っているので、グループのIDは1

+1

でこれを確認する時間が何かを削除したいことを確認する必要があります。 –

1

パターンを(?::[0-5][0-9])(\.[0-9]{1,3})に変更し、findをマッチャーで実行し、group(1)にあるものすべてを削除します。

バックスラッシュは '。'文字との一致を強制します。 charではなく、ドットが正規表現で表す文字の代わりに使用されます。

(?:は非キャプチャグループを定義しているため、マッチャのgroup(...)では考慮されません。

あなたが望むものの周りにかっこを追加すると、それはマッチャーのグループとして表示され、この場合は最初のグループになります。

良い参考にパターンjavadocのです:http://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html

+0

いいえ、私は ":"タグ –

1

は `$ 1 'と交換

string.replaceAll("(.*)\\.\\d{1,3}(.*)","$1$2"); 
関連する問題