2009-07-02 85 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會導致last -.-和name字段被合併,假設您正在每行上執行分割。如果您不介意將時間戳也分成兩部分,則分界限爲9將起作用。 – 2009-07-02 15:17:38

+0

他特別說:「我希望每一行都分成8塊」,我沒有發現時間戳之間的單個空白區域。如果是製表符分隔,則可以採用每行和.split(@「\ s \ s +」,8) – dlamblin 2009-07-02 16:25:47

2

你爲什麼要使用正則表達式在這裏?

的數據文件完全一致,你可以用

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

它的速度要快得多這種方式提取數據。

0

這看起來像格式化文本。首先猜測是打破選項卡字符。

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

如果這不起作用,我會打破未遵循parens的空格。在Pattern下的javadoc中查找先行模式語法: 如果您對正則表達式拆分

"ABC DEF (GHI)" 

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

(看這是 '空間(X)?!' 這裏的 「(X)意味着什麼?!」 負前瞻匹配「X 「而逃脫openparen 」\(「 被取代)。

你 」ABC,DEF(GHI)「

假設文本是製表符分隔,通過數字位置將不起作用解析。

0

我想你需要9件而不是8件。所以試試吧,line.split("\\s+", 9);