【发布时间】:2016-03-31 07:33:58
【问题描述】:
我正在解析以下AWS 成本实例表:
m1.small 1 1 1.7 1 x 160 $0.044 per Hour
m1.medium 1 2 3.75 1 x 410 $0.087 per Hour
m1.large 2 4 7.5 2 x 420 $0.175 per Hour
m1.xlarge 4 8 15 4 x 420 $0.35 per Hour
有一个包含这些费用的文件:
input = new Scanner(file);
String[] values;
while (input.hasNextLine()) {
String line = input.nextLine();
values = line.split("\\s+"); // <-- not what I want...
for (String v : values)
System.out.println(v);
}
但是这给了我:
m1.small
1
1
1.7
1
x
160
$0.044
per
Hour
这不是我想要的...经过更正解析的values(使用正确的正则表达式)如下所示:
['m1.small', '1', '1', '1.7', '1 x 160', '$0.044', 'per Hour']
为了获得正确的结果,正确的regex 是什么?可以假设该表将始终具有相同的模式。
【问题讨论】:
-
实际数据是否用制表符分隔?是否存在列仅由一个空格分隔的情况?
-
@Pietu1998 大多数情况下......但不一定......正则表达式会产生更强大的东西......这就是为什么我没有使用
\\t+解析的原因。这些文件很大,因此搜索这些文件以修复丢失的选项卡可能毫无意义。 -
你能用
\\s{2,}吗? -
@PM77-1 是的,但这给了我一个问题:
1.7 1 x 160 $0.044 per Hour -
换个方式怎么样?按
\\s拆分,然后连接部分结果。