0

テキスト行から double を解析しようとしています。やりたいことをやっていると思っていた数行のコードを見つけました。ただし、負の double を解析しないことを発見しました (正として解析するだけです)。私は正規表現にまったく慣れていないので、少し圧倒されます。誰かが以下のコードを説明し、各部分の意味と、正と負の double の両方を解析するように変更する方法を教えてもらえないだろうか? 前もって感謝します!

double nextDouble;
Matcher matcher = Pattern.compile("(?!=\\d\\.\\d\\.)([\\d.]+)").matcher(line);
if (matcher.find()) nextDouble = Double.parseDouble(matcher.group(1)));

編集: これは行の例です。「104.44518717、34.09785265、103.39288764、0.09813121、0.00000000、-0.46612322、4.68576504」

-0.46612322 を 0.46612322 として解析します。

4

3 に答える 3

2

式には 2 つの部分があります。

括弧内の最初の部分は、一致する文字列の前に数字とポイントがないようにします。役立つサンプル行を提供する場合、なぜその部分が必要なのかわかりません。

ブラケットの 2 番目の部分は、マッチング パーツです。それは、1 つ以上の数字と点に一致すると言っているだけです。

式を負の数で機能させたい場合は、一致するセットに「-」文字を追加するだけです。

(?!=\\d-\\.)([-\\d\\.]+) 

しかし、これは、式と同様に、複数のポイント (ドット) を持つ文字列と一致します。例: 122.12.12

そこで、次のことを試してみることをお勧めします。最初の部分を削除したことに注意してください。

(-?(\\d)+(\\.)?(\\d)*)
于 2013-01-17T13:47:16.740 に答える
1

次の正規表現を試してください。

(-?\\d+\\.\\d+)
于 2013-01-17T13:28:37.673 に答える
0

これを試して:

"((\\d+\\.?\\d*)|(\\.\\d+))(([Ee][+-]?)?\\d+)?"
于 2015-11-23T11:12:33.627 に答える