2011-02-06 9 views
5

quiero saber si un patrón en particular existe en mi archivo de texto o no.¿Cómo se empareja un patrón en el texto utilizando clases de escáner y patrón?

im utilizando siguientes clases para esto:

java.util.regex.Pattern and java.util.Scanner; 

mi línea de texto de la muestra es

String Line="DBREF 1A1F A 102 190 UNP P08046 EGR1_MOUSE  308 396"; 

y, quiero coincidir siguiente tipo de patrón:

A 102 190 

donde, en la posición az o AZ de A, pero con carta única.

en la posición 102 cualquier número entero y de cualquier longitud.

en la posición de 190 cualquier número entero y de cualquier longitud.

y, Mi código de coincidencia de patrones es:

 Scanner sr=new Scanner(Line); 
    Pattern p = Pattern.compile("\\s+([a-zA-Z]){1}\\s+\\d{1,}\\s+\\d{1,}\\s+"); 
    while(sr.hasNext(p)) 
    { 
     System.out.println("Pattern exists"); 
     System.out.println("Matched String : "+sr.next(p)); 
    } 

pero, patrón no coincide ni siquiera que existe allí ..

Creo que el problema es con mi cadena de patrón:

\\s+([a-zA-Z]){1}\\s+\\d{1,}\\s+\\d{1,}\\s+" 

alguien, por favor ayúdenme, ¿qué cadena de patrones debería usar ????

Respuesta

10

No estoy seguro de que Scanner sea la mejor herramienta para esto, ya que hasNext (Pattern) comprueba si el próximo token completo tiene el siguiente patrón. Su patrón se extiende a tokens.

¿Ha intentado utilizar un objeto Matcher en lugar del escáner?

import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

public class Foo2 { 
    public static void main(String[] args) { 
     String line = "DBREF 1A1F A 102 190 UNP  P08046 EGR1_MOUSE  308  396"; 
     Pattern p = Pattern.compile("\\s+[a-zA-Z]\\s+\\d{1,}\\s+\\d{1,}\\s+"); 

     Matcher matcher = p.matcher(line); 

     while (matcher.find()) { 
      System.out.printf("group: %s%n", matcher.group()); 
     } 
     System.out.println("done"); 
    } 
} 
+0

aún no funciona .. Creo que el problema es con argumentos pattern.compile –

+0

Se trabajó bien para mí. Un poco detallado quizás, pero deberían funcionar. Pruebe un pequeño programa de prueba compilado como se muestra arriba. –

+0

has probado con esta línea: - DBREF 1A1F A 102 190 UNP P08046 EGR1_MOUSE 308 396 –

3

Esta línea de expresiones regulares funciona:

\\s+\\w\\s+\\d+\\s+\\d+ 

group(0) de su matcher (p.matcher) da A 102 190

.

[EDIT] Ok, te voy a dar una muestra de trabajo completa a continuación:

Pattern p = Pattern.compile("\\s+\\w\\s+\\d+\\s+\\d+"); 
    Matcher matcher = p.matcher("DBREF 1A1F A 102 190 UNP P08046 EGR1_MOUSE  308 396"); 
    matcher.find(); 
    System.out.println("Found match: " + matcher.group(0)); 
    // Found match: A 102 190 
+0

todavía no funciona ... –

+0

Lo probé, funciona. ¿Estás seguro de que estás extrayendo el primer "grupo" de tu marcador? –

+0

has probado con esta línea: - DBREF 1A1F A 102 190 UNP P08046 EGR1_MOUSE 308 396 –

Cuestiones relacionadas