2009-07-02 9 views
1

を分割し、次ののJava正規表現は、私はいくつかのデータは以下のようにフォーマットされている

 
2009.07.02 02:20:14 40.3727 28.2330  6.4  2.6 -.- -.- BANDIRMA-BALIKESIR 
2009.07.02 01:38:34 38.3353 38.8157  3.5  2.7 -.- -.- KALE (MALATYA) 
2009.07.02 00:10:28 38.8838 26.9328  3.0  3.0 -.- -.- CANDARLI KÖRFEZI (EGE DENIZI) 
2009.07.01 23:33:31 36.8027 34.0975  8.2  2.9 -.- -.- GÜZELOLUK-ERDEMLI (MERSIN) 
2009.07.01 22:32:44 38.9260 27.0338  5.0  3.4 -.- -.- CANDARLI KÖRFEZI (EGE DENIZI) 
2009.07.01 22:12:37 40.2120 41.0378  3.7  2.9 -.- -.- OVACIK-ILICA (ERZURUM) 
2009.07.01 22:10:53 38.9208 26.9502  5.0  3.5 -.- -.- ÇANDARLI-DIKILI (IZMIR) 
2009.07.01 21:44:29 38.8695 27.1268  6.9  2.9 -.- -.- YUNTDAG-BERGAMA (IZMIR) 
2009.07.01 21:27:53 38.9073 26.9895  5.0  3.0 -.- -.- CANDARLI KÖRFEZI (EGE DENIZI) 
2009.07.01 21:18:19 38.9212 26.9060  5.0  3.4 -.- -.- CANDARLI KÖRFEZI (EGE DENIZI) 
2009.07.01 21:12:15 38.8657 26.9447  13.7  3.8 -.- -.- CANDARLI KÖRFEZI (EGE DENIZI) 
2009.07.01 21:09:43 38.9260 27.0853  5.0  3.1 -.- -.- ZEYTINDAG-BERGAMA (IZMIR) 
2009.07.01 21:05:40 38.9153 26.9710  5.0  3.4 -.- -.- ÇANDARLI-DIKILI (IZMIR) 
2009.07.01 20:29:02 37.6888 38.7212  5.0  3.3 -.- -.- AKINCILAR-KAHTA (ADIYAMAN) 
2009.07.01 18:17:12 41.2700 36.0502  2.7  2.7 -.- -.- TAFLAN- (SAMSUN) 
2009.07.01 17:50:03 38.6312 35.7962  5.0  2.8 -.- -.- ELBASI-BÜNYAN (KAYSERI) 

私は、これは白い線で分割したいと思いますが、私は括弧がある場合に分割しないように最後の列をご希望ですか?私は各ラインを8個に分割したいと思います。これは可能ですか?

答えて

0

これを正規表現ツール(RegexBuddyなど)に入れます。

しかし、あなたの目的のために、\s+または\s\s+に分割してlimitを設定するのは簡単です。それはあなたがあなたの正規表現を書くのに役立つツールを使用する理由は、テキストのどの部分に依存します。

あなたが特に実際に起因する「言葉(単語単語)」あなたはzero-width negative lookaheadグループを使用することができるように可能ラインにあなたの問題を解決しない「(」が先行マッチングスペースを回避したい場合。\s+(?!\()のようなものを。

+0

これは機能しません。 \ s +で分割して8を限度にすると、最後の-.-と名前フィールドが結合されます。これは、各行で分割を実行していることを前提としています。タイムスタンプが2つの部分に分割されても構わないと仮定すると、制限が9の分割が機能します。 –

+0

彼は具体的に言った: "私は各ラインを8個に分割したい"明確に、私はタイムスタンプの間に単一の空白を見つけることはありませんでした。タブ区切りの場合は、各行と.split(@ "\ s \ s +"、8) – dlamblin

2

なぜ、あなたはここに正規表現を使用していますか?

をデータファイルが完全に整列され、あなたはそれが非常に速く、この方法です

line.substring(0,12) 
line.substring(13,20) 
.. 
.. 

でデータを抽出することができます。

0

これは書式付きテキストのようです。最初に、タブ文字を壊すことになります。

String[] parts = line.split('\t'); 

これでうまくいかない場合は、括弧で囲まれていない空白で区切ります。先読みパターンの構文については、パターンのjavadocを参照してください。 あなたが正規表現に

"ABC DEF (GHI)" 

分割した場合:(としてこれを読んで '?!(スペースX)' を

String regex="\\ (?!\\()"; 

をX負の先読みマッチング」を "?!(X)は、意味" ここで、 "とエスケープopenparenは "\ "ABC、DEF(GHI)("

あなたが得る。置換された)" というテキストを想定すると

は動作しません数値位置により解析し、タブ区切りです。

+0

を使用できます。単にstring.split( "\ t")を使用してください。 –

0

私は8個ではなく9個が必要だと思います。だから、line.split("\\s+", 9);を試してみてください。

関連する問題