Regex: divisi贸n por car谩cter, a menos que est茅 entre comillas

    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!

     

    Deja una respuesta

    Tu direcci贸n de correo electr贸nico no ser谩 publicada. Los campos obligatorios est谩n marcados con *