Estoy buscando dividir mi cadena en base a [,]. Pero hay una restricción, si el [,] viene dentro de "", debemos ignorarlos.
Ejemplo:
Para una cadena:
"""hello "hi" [abc: "pqr[abc]"] bye | [xyz]"""
Las cadenas divididas deben ser:
hello "hi"
abc: "pqr[abc]"
bye |
xyz
3 respuestas
En lugar de tratar de dividir, puede usar el método find()
y describir todo lo que no es un corchete excepto las partes entre comillas:
[^\]\["]+(?:"[^"]*"[^\]\["]*)*|(?:"[^"]*"[^\]\["]*)+
(No olvides agregar barras invertidas en la cadena de tu patrón).
Si realmente necesita dividir, puede usar el análisis anticipado para verificar que el número de comillas que sigue al delimitador candidato es par:
[\][](?=[^"]*(?:"[^"]*"[^"]*)*$)
Pero la anticipación es bastante ineficiente. Si es aceptable hacer lo contrario y encontrar las coincidencias entre los delimitadores (con find()
), en lugar de dividir, puede usar:
Una de las posibles soluciones (que no requiere expresiones regulares difíciles) podría ser la siguiente:
(1) dividir sin tener en cuenta las citas
(2) cuente números (acumulativos) de comillas en cada componente resultante
(3) vuelva a unirse en los límites donde dicho número es impar
Preguntas relacionadas
Nuevas preguntas
java
Java es un lenguaje de programación popular de alto nivel. Use esta etiqueta cuando tenga problemas para usar o comprender el lenguaje en sí. Esta etiqueta rara vez se usa sola y se usa con mayor frecuencia junto con [spring], [spring-boot], [jakarta-ee] y [maven].