Dividiendo una cadena usando Regex en Java

¿Alguien podría ayudarme con alguna expresión regular?

Quiero dividir la siguiente cadena en un número, número de cadena

"810LN15"

1 método requiere que se devuelva 810, otro requiere LN y otro debe devolver 15.

La única solución real para esto es usar expresiones regulares ya que los números crecerán en longitud

¿Qué regex puedo usar para acomodar esto?

String.split no te dará el resultado deseado, que supongo que sería “810”, “LN”, “15”, ya que tendría que buscar un token para dividir y eliminaría ese token.

En su lugar, intente Pattern y Matcher , use esta expresión regular: (\d+)|([a-zA-Z]+) , que coincidiría con cualquier secuencia de números y letras y obtendría distintos grupos de números / texto (es decir, “AA810LN15QQ12345” resultaría en los grupos “AA”, “810”, “LN”, “15”, “QQ” y “12345”).

Ejemplo:

 Pattern p = Pattern.compile("(\\d+)|([a-zA-Z]+)"); Matcher m = p.matcher("810LN15"); List tokens = new LinkedList(); while(m.find()) { String token = m.group( 1 ); //group 0 is always the entire match tokens.add(token); } //now iterate through 'tokens' and check whether you have a number or text 

En Java, como en la mayoría de las versiones de expresiones regulares (Python es una excepción notable), la expresión regular split() no requiere consumir ningún carácter cuando encuentra una coincidencia. Aquí he usado lookaheads y look behinds para coincidir con cualquier posición que tenga un dígito en un lado y un no dígito en el otro:

 String source = "810LN15"; String[] parts = source.split("(?<=\\d)(?=\\D)|(?<=\\D)(?=\\d)"); System.out.println(Arrays.toString(parts)); 

salida:

 [810, LN, 15] 

(\\d+)([a-zA-Z]+)(\\d+) debe hacer el truco. El primer grupo de captura será el primer número, el segundo grupo de captura serán las letras intermedias y el tercer grupo de captura será el segundo número. Las doble barras invertidas son para java.

Esto te da exactamente lo que ustedes están buscando.

  Pattern p = Pattern.compile("(([a-zA-Z]+)|(\\d+))|((\\d+)|([a-zA-Z]+))"); Matcher m = p.matcher("810LN15"); List tokens = new LinkedList(); while(m.find()) { String token = m.group( 1 ); tokens.add(token); } System.out.println(tokens);