2010-08-19 26 views
6

Tengo una expresión regular y Java.Obtener subcadena con la expresión regular

Mi cadena de entrada que tiene este aspecto:

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

quiero leer a cabo el primer y el segundo valores (es decir, 132 y 194) en dos variables. De lo contrario, la cadena es estática y solo cambian los números.

Respuesta

10

Supongo que el "primer valor" es 132, y el segundo 194.

Esto debería hacer el truco:

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

Un millón de gracias por la ayuda, salvó (muy estresado) días aquí! – StefanE

+0

Preferiría usar este patrón '. *? ([0-9] +)/([0-9] +). *'. Sin personajes innecesarios. –

4

se puede resolver con 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" 
} 

o como una sola línea:

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

y

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

+1 - Siempre es mejor usar múltiples llamadas .split() con expresiones regulares más simples que usando una llamada .split() incluso con expresiones regulares moderadamente complejas. – whaley

1

Si se va después de 68 y 94, aquí hay un patrón que va a funcionar:

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); 
    } 
Cuestiones relacionadas