Java正则表达式分裂

时间:2009-07-02 02:57:06

标签: java regex split

我有一些数据如下所示

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个部分。这可能吗?

4 个答案:

答案 0 :(得分:2)

为什么在这里使用正则表达式?

数据文件完全对齐,您可以使用

提取数据
line.substring(0,12)
line.substring(13,20)
..
..

这种方式要快得多。

答案 1 :(得分:0)

将其放入正则表达式工具,例如RegexBuddy

但出于您的目的,可以轻松地在\s+\s\s+上进行拆分并设置limit。这取决于您想要的文本部分,这就是您使用该工具来帮助您编写正则表达式的原因。

如果您特别希望避免使用前缀为“(”的匹配空格,由于可能的行(例如“单词(单词)”)而无法解决您的问题,您可以使用zero-width negative lookahead组。 {1}}。

答案 2 :(得分:0)

这看起来像格式化文本。首先猜测是打破标签字符。

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

如果这不起作用,我会打破空间而不是parens。查看Pattern下的javadoc以寻找先行模式语法: 例如如果你拆分

"ABC DEF (GHI)" 

在正则表达式上:

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

(读作'space(?!X)',其中“(?!X)表示”负前瞻匹配“X”和转义的openparen“\(”代替)。

你得到“ABC,DEF(GHI)”

假设文本以制表符分隔,则按数字位置解析将不起作用。

答案 3 :(得分:0)

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

相关问题