使用正则表达式获取子字符串

时间:2010-08-19 14:45:20

标签: java regex

我坚持使用正则表达式和Java。

我的输入字符串如下所示:

"EC: 132/194 => 68% SC: 55/58 => 94% L: 625"

我想将第一个和第二个值(即132194)读出为两个变量。否则字符串是静态的,只有数字会改变。

3 个答案:

答案 0 :(得分:10)

我假设“第一个值”是132,第二个值是194

这应该可以解决问题:

String str = "EC: 132/194 => 68% SC: 55/58 => 94% L: 625";

Pattern p = Pattern.compile("^EC: ([0-9]+)/([0-9]+).*$");
Matcher m = p.matcher(str);

if (m.matches())
{
    String firstValue = m.group(1); // 132
    String secondValue= m.group(2); // 194
}

答案 1 :(得分:4)

您可以使用String.split()解决问题:

public String[] parse(String line) {
   String[] parts = line.split("\s+");
   // return new String[]{parts[3], parts[7]};  // will return "68%" and "94%"

   return parts[1].split("/"); // will return "132" and "194"
}

或作为单行:

String[] values = line.split("\s+")[1].split("/");

int[] result = new int[]{Integer.parseInt(values[0]), 
                         Integer.parseInt(values[1])};

答案 2 :(得分:1)

如果你是在68岁和94岁之后,这是一个可行的模式:

    String str = "EC: 132/194 => 68% SC: 55/58 => 94% L: 625";

    Pattern p = Pattern.compile("^EC: [0-9]+/[0-9]+ => ([0-9]+)% SC: [0-9]+/[0-9]+ => ([0-9]+)%.*$");
    Matcher m = p.matcher(str);

    if (m.matches()) {
        String firstValue = m.group(1); // 68
        String secondValue = m.group(2); // 94
        System.out.println("firstValue: " + firstValue);
        System.out.println("secondValue: " + secondValue);
    }