La división de la cadena en Java: búsqueda hacia atrás con la longitud especificada

huangjs:

Quiero dividir una cadena después de la letra "K" o "L" salvo cuando sea va seguido de la letra "P". Mientras tanto, espero que no para dividir si la longitud de la subcadena menos de 4 cuando la cadena se divide en una ubicación. Por ejemplo:

- Input:
AYLAKPHKKDIV

- Expected Output
AYLAKPHK
KDIV

Ahora, he logrado hasta la cadena dividida después de la letra "K" o "L" salvo cuando sea va seguido de la letra "P". Mi expresión regular (?<=[K|R])(?!P).

My result:
AYLAKPHK
K
DIV

Sin embargo, no sé cómo ignorar el punto donde se corta en la longitud subcadena menos de 4.

mi demostración

Pshemo:

Espero que no para dividir si la longitud de la subcadena menos de 4

En otras palabras, usted quiere tener

  1. anterior partido (split) separa a la corriente partido con al menos 4 caracteres, por lo que ABCKABKKABCDsería dividido en ABCK|ABKK|ABCDno, pero no en `abck | ABK | .....

  2. al menos 4 caracteres después de corriente dividida desde ABCKABdespués de escisión ABCK|ABtendría ABal final cuya longitud es menor que 4.

Para lograr primera condición se puede usar \Glo que representa el lugar del partido anterior (o inicio de la cadena si hay coincidencias ware aún). Así primera condición puede ser similar (?<=\G.{4,})(ADVERTENCIA: suelen mirar detrás Espera longitud obvia máxima de subregex que maneja, pero por algunas razones .{4,}trabaja aquí, que puede ser error o característica adicional en Java 10 que estoy usando ahora En caso de que se queja de. ella, se puede utilizar un número muy grande que debe ser más grande que la cantidad máxima de caracteres que se puede esperar entre dos divisiones como .{4,10000000})

Segunda condición es más simple, ya que es justo (?=.{4}).

Por cierto que no desea |en [K|R]ya que representa literal, no operador OR ya que por defecto cualquier carácter de juego de caracteres es opción alternativa. Por lo tanto [K|R]representa KO |O R. Utilice [KR]en su lugar.

MANIFESTACIÓN:

String text = "AYLAKPHKKKKKKDIVK123KAB";
String regex = "(?<=[KR])(?!P)(?<=\\G.{4,})(?=.{4})";
for (String s : text.split(regex)){
    System.out.println("'"+s+"'");
}

Salida:

'AYLAKPHK'
'KKKK'
'KDIVK'
'123KAB'

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=218071&siteId=1
Recomendado
Clasificación