Regex: división por carácter, a menos que esté entre comillas

R

Muchas veces, cuando estás analizando texto, necesitas dividir cadenas en un carácter de coma (o nuevas líneas, pestañas, etc.), pero ¿qué pasa si necesitas usar una coma en tu cadena y no dividirla? Un ejemplo de esto podría ser un gran número. Entonces, tal vez tengamos una cadena como esta:

age: 28, favorite number: 26, salary: $1,234,108

Dividir por comas en esto daría como resultado:

age: 28
favorite number: 26
salary: $1
234
108

Cerca, pero no del todo.

Para propósitos de formato, muchos números tienen comas como esta, por lo que realmente no podemos evitarlo.

Una forma de resolver este problema es poner comillas alrededor de la cadena que no debe dividirse. Entonces, nuestro ejemplo anterior se vería así:

age: 28, favorite number: 26, "salary: $1,234,108"

Entonces, ahora para dividir esto, necesitaremos crear una cadena de expresiones regulares que diga “dividir en todos los caracteres de coma a menos que esté entre comillas”.

Usando Java y Regex, esto debería funcionar:

String[] strArray = text.split(",(?=([^"]*"[^"]*")*[^"]*$)");

Usando la cadena de expresiones regulares anterior, así es como dividiríamos una cadena usando Java:

String input = "age: 28, favorite number: 26, "salary: $1,234,108"";
String[] splits = input.split(",(?=([^"]*"[^"]*")*[^"]*$)");
for (int i = 0; i < splits.length; i++) {
    System.out.println(splits[i].trim());
}
// Output:
// age: 28
// favorite number: 26
// salary: $1,234,108

Esta cadena de expresiones regulares usa lo que se llama una “búsqueda anticipada positiva” para verificar las comillas sin hacer coincidirlas.

Esta es una característica realmente poderosa en regex, pero puede ser difícil de implementar.

Para practicar, intente mirar la expresión regular que le dimos y vea si puede modificarla para dividirla en un carácter diferente, como un punto y coma (;). Si le resultó fácil, intente modificarlo para que tenga dos comillas en cada lado de la cadena.

¿Tiene una cadena de expresiones regulares más simple o algunos consejos para crearlas? ¡Háznoslo saber en los comentarios!

 

About the author

Ramiro de la Vega

Bienvenido a Pharos.sh

Soy Ramiro de la Vega, Estadounidense con raíces Españolas. Empecé a programar hace casi 20 años cuando era muy jovencito.

Espero que en mi web encuentres la inspiración y ayuda que necesitas para adentrarte en el fantástico mundo de la programación y conseguir tus objetivos por difíciles que sean.

Add comment

Sobre mi

Últimos Post

Etiquetas

Esta web utiliza cookies propias para su correcto funcionamiento. Al hacer clic en el botón Aceptar, aceptas el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Más información
Privacidad