2010-12-17 13 views
5

necesito asociar y analizar los datos en un archivo que se parece a:Java expresión regular con un guión

4801-1-21-652-1-282098 
4801-1-21-652-2-282098 
4801-1-21-652-3-282098 
4801-1-21-652-4-282098 
4801-1-21-652-5-282098 

pero no parece el patrón que escribí a continuación para trabajar. ¿Alguien puede ayudarme a entender por qué?

final String patternStr = "(\\d+)-(\\d+)-(\\d+)-(\\d+)-(\\d+)-(\\d+)"; 
final Pattern p = Pattern.compile(patternStr); 

while ((this.currentLine = this.reader.readLine()) != null) { 
    final Matcher m = p.matcher(this.currentLine); 
    if (m.matches()) { 
     System.out.println("SUCCESS"); 
    } 
} 

Respuesta

7

Parece correcto. Algo extraño está confinado en tus líneas, probablemente. Busque algunos espacios adicionales y saltos de línea.

Prueba esto:

final Matcher m = p.matcher(this.currentLine.trim()); 
+0

que era exactamente lo que está mal –

4

Ha intentado escapar de la - como \\-?

+0

I did. Lo solucioné, faltaba espacio en blanco. –

+0

Aha, el espacio en blanco invisible invisible golpea de nuevo :-) –

1

hay espacios en blanco en los datos

4801-1-21-652-1-282098 
4801-1-21-652-2-282098 
4801-1-21-652-3-282098 
4801-1-21-652-4-282098 
4801-1-21-652-5-282098 

final String patternStr = "\\s*(\\d+)-(\\d+)-(\\d+)-(\\d+)-(\\d+)-(\\d+)"; 
+0

La respuesta de @Roman también se ocupa de este problema. –

3

debería funcionar. Asegúrese de que no haya caracteres invisibles, recorte una línea. Puede refinar el código como:

final String patternStr = "(\\d{4})-(\\d{1})-(\\d{2})-(\\d{3})-(\\d{1})-(\\d{6})"; 
Cuestiones relacionadas