2010-11-17 21 views
6

Supongamos que tengo una cadena con varias palabras de longitud desconocida. Planeo dividir la cadena usando una expresión regular. Algo como:Regex para obtener las dos primeras palabras de longitud desconocida de una cadena

String resString = origString.split(".*//s.*//s")[0]; 

¿Cuál sería la expresión regular para obtener las dos primeras palabras? Estaba pensando .*//s.*//s, por lo que todos los personajes, seguidos de un espacio, luego todos los personajes, seguidos de otro espacio. Pero usar eso me da exactamente la misma cadena que tenía antes. ¿Voy por esto de la manera incorrecta?

¡Cualquier ayuda sería apreciada!

+0

Debe ser el Prisionero de Bill, ¿verdad? – tchrist

Respuesta

12

Si solo tiene espacios entre palabras, divida por \\s+. Cuando te dividas, la matriz sería las palabras mismas. En primer lugar dos sería en arr[0] y arr[1] si lo hace:

String[] arr = origString.split("\\s+"); 
2

Suponiendo sus "palabras" constar de caracteres alfanuméricos, la siguiente expresión regular coincidirá con las 2 primeras palabras:

\w+\s+\w+ 
+0

En realidad, eso no funciona correctamente en Java. – tchrist

+2

"\\ w + \\ s + \\ w +" funcionará en Java. Me refería a la sintaxis genérica de expresiones regulares. – buru

4

si quieres dividirlo sobre exactamente el carácter de espacio:

String[] parts = args[i].split(" "); 

Si desea dividir en cualquier espacio en blanco (espacio, tabulación, nueva línea, cr):

String[] parts = args[i].split("\\s"); 

tratar múltiples espacios adyacentes como un separador:

String[] parts = args[i].split(" +"); 

Lo mismo para los espacios en blanco:

String[] parts = args[i].split("\\s+"); 

Las primeras dos palabras serían parts[0] y parts[1]

5

con expresiones regulares puedes hacer algo como esto:

public static ArrayList<String> split2(String line, int n){ 
    line+=" "; 
    Pattern pattern = Pattern.compile("\\w*\\s"); 
    Matcher matcher = pattern.matcher(line); 
    ArrayList<String> list = new ArrayList<String>(); 
    int i = 0; 
    while (matcher.find()){ 
     if(i!=n) 
      list.add(matcher.group()); 
     else 
      break; 
     i++; 
    } 
    return list; 
} 

si desea que los primeros n palabras, o simplemente esto:

public static String split3(String line){ 
    line+=" "; 
    Pattern pattern = Pattern.compile("\\w*\\s\\w*\\s"); 
    Matcher matcher = pattern.matcher(line); 
    matcher.find(); 
    return matcher.group(); 
} 

si desea que sólo las primera y segunda palabras.

Cuestiones relacionadas