2010-08-19 13 views
6

Ich bin mit regulären Ausdruck und Java fest.Erhalten Teilzeichenfolge mit regulärem Ausdruck

Meine Eingabestring, der wie folgt aussieht:

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

Ich möchte die ersten und zweiten Werte auszulesen (das heißt, 132 und 194) in zwei Variablen. Ansonsten ist der String statisch und nur Zahlen ändern sich.

Antwort

10

Ich nehme an, der "erste Wert" ist 132, und der zweite 194.

Diese den Trick tun sollten:

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 
} 
+0

Dank einer Million für die Hilfe, rettete mein (sehr gestresst) Tag hier! – StefanE

+0

Ich würde lieber dieses Muster '. *? ([0-9] +)/([0-9] +). *' Verwenden. Keine unnötigen Zeichen. –

4

Sie können es lösen mit 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" 
} 

oder als Einzeiler:

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

und

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

+1 - Sie sind immer besser dran mit mehreren .split() - Aufrufe mit einfacheren Regex als mit einem .split() -Aufruf, selbst mit mäßig komplexen Regexen. – whaley

1

Wenn Sie nach 68 wurden und 94, hier ist ein Muster, das funktioniert:

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); 
    } 
Verwandte Themen