連続する 12 個の (多くの場合) 異なる float の文字列 (前に無関係なテキストがあり、フィールドをマークしている) を解析し、それらすべてを独自のキャプチャ グループにして、それらを収集したいと考えています。一度に 1 つずつマッチャー。私は次のように書くことで成功していることに気づきました:
Pattern lastYearIncomePattern = Pattern.compile("(.+\\{\\s)([0-9]{1,2}\\.[0-9]{3}\\s)([0-9]{1,2}\\.[0-9]{3}\\s)([0-9]{1,2}\\.[0-9]{3}\\s)([0-9]{1,2}\\.[0-9]{3}\\s)([0-9]{1,2}\\.[0-9]{3}\\s)([0-9]{1,2}\\.[0-9]{3}\\s)([0-9]{1,2}\\.[0-9]{3}\\s)([0-9]{1,2}\\.[0-9]{3}\\s)([0-9]{1,2}\\.[0-9]{3}\\s)([0-9]{1,2}\\.[0-9]{3}\\s)([0-9]{1,2}\\.[0-9]{3}\\s)([0-9]{1,2}\\.[0-9]{3}\\s)");
これは重複したコードの膨大な量です。この部分([0-9]{1,2}\\.[0-9]{3}\\s)
は 12 回発生します。
これをより良く行う方法はありますか?その文字列自体を定義してから、ループと StringBuilder を介して正規表現に追加することを検討しましたが、すべてやり過ぎのようです。12 個の値が異なるため、明らかに逆参照も機能しませんでした。
私の最初のアプローチは を書くことでした([0-9]{1,2}\\.[0-9]{3}\\s){12}
が、これは 12 個のフロートすべてを 1 つの長い文字列に入れます。これは私が望むものではありません。フロートを 1 つずつ選択するには別のパターンが必要になるからです。が好ましい。
ありがとう