准备正则表达式来解析简单的字符串

时间:2015-09-09 10:40:34

标签: java regex

我得到一个简单的字符串,我想从中提取一些值。这些值由空白字符分隔如下:

abc               0.00    11.00    0.00    4.50     0.00   124.00    27.56     0.01    1.44   0.89   0.40

我想获得这些值:abc,0.00,11.00,...

我试过了:

    String line = "abc               0.00    11.00    0.00    4.50     0.00   124.00    27.56     0.01    1.44   0.89   0.40";
    String regex = "^([\\w\\.]*)\\s+([\\w\\.])*\\s+([\\w\\.])*\\s+([\\w\\.])*\\s+([\\w\\.])*\\s+([\\w\\.])*\\s+([\\w\\.])*\\s+([\\w\\.])*\\s+([\\w\\.])*\\s+([\\w\\.])*\\s+([\\w\\.])*\\s+([\\w\\.])*\$";
    Pattern ptrn = Pattern.compile(regex);
    Matcher matcher = ptrn.matcher(line); 
    if(matcher.find())
    {
        System.out.println(matcher.group(1));
        System.out.println(matcher.group(2));
        System.out.println(matcher.group(3));
        System.out.println(matcher.group(4));
        System.out.println(matcher.group(5));
        System.out.println(matcher.group(6));
        System.out.println(matcher.group(7));           
        System.out.println(matcher.group(8));
        System.out.println(matcher.group(9));
        System.out.println(matcher.group(10));
        System.out.println(matcher.group(11));
        System.out.println(matcher.group(12));          
    }

我得到以下输出:

abc
0
0
0
0
0
0
6
1
4
9
0

我做错了什么?

1 个答案:

答案 0 :(得分:4)

  • 首先,您的示例将无法编译,因为您在模式\的末尾挂起String
  • 其次,你在第一个组之后的所有组中放错了贪婪的0+量词 - 你可以使用:([\\w\\.]*)代替([\\w\\.])*
  • 轻松解决它
  • 上述模式之间的细微差别主要在于您的分组
  • 第三,你最好用空格分割你的输入并迭代数组元素

示例

String line = "abc               0.00    11.00    0.00    4.50     0.00   124.00    27.56     0.01    1.44   0.89   0.40";
String[] items = line.split("\\s+");
System.out.println(Arrays.toString(items));

<强>输出

[abc, 0.00, 11.00, 0.00, 4.50, 0.00, 124.00, 27.56, 0.01, 1.44, 0.89, 0.40]

注意

由于您的数组是(0-)索引,您可以通过索引检索每个项目,例如items[0]items[1],... items[items.length - 1]