我有一些数据如下所示
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 :(得分: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);
。