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.
Espero que no para dividir si la longitud de la subcadena menos de 4
En otras palabras, usted quiere tener
anterior partido (split) separa a la corriente partido con al menos 4 caracteres, por lo que
ABCKABKKABCD
sería dividido enABCK|ABKK|ABCD
no, pero no en `abck | ABK | .....al menos 4 caracteres después de corriente dividida desde
ABCKAB
después de escisiónABCK|AB
tendríaAB
al final cuya longitud es menor que 4.
Para lograr primera condición se puede usar \G
lo 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 K
O |
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'