Buenas tardes querida comunidad,
Estoy tratando de resolver un problema con regex, a ver si me podeis ayudar.
Estoy buscando una expresión regular para limpiar un json que haga lo siguiente:
Quiero reemplazar todas las comillas " y las comas , dentro de una expresión. Pongo el ejemplo con el que me estoy rompiendo la cabeza.
¡Resuelto! Ir a solución.
Hola @grchavarri
Descarto que hacer un JSON parse no es una opción (aunque podrías lograr este objetivo sumarizando luego)
Qué tal si probamos esto, usando Replace y ReplaceChar solamente:
- Hacer un replace de ":" y otros patrones que quieras reemplazar por otro separador (por ejemplo: ~) --> Replace([campo] , '":"',"~") <-- atención a las comillas simple y dobles
- Luego, reemplazar las comillas existentes con vacío (ReplaceChar('"',"")
- Finalmente volver a reemplazar el separador temporal (~) por ":"
Esto debería resolver tu problema actual (por lo menos mientras busco cómo se arma el regex)
Buenas @Aguisande
La verdad es que es una solución posible, la unica historia es que estoy haciendo esto porque el json parser no me lee el total del texto descargado y no me lee bien los campos porque estan esas "" ahi y esas , que hacen desestructurar el json.
Por eso tengo que reemplazar eso concretamente, el problema viene en que todos los campos string del json se comportan igual, empiezan por ":" y acaban por "," porque tendrían una estructura tipo "field":"juan","Pricemin":0, Asi que tengo ciertas dudas de si haciendo eso podre o no fastidiar otras partes del asunto.
Lo voy a probar y te voy contando.
Ya he encontrado una parte de la expresión, \"\:\"(.*?)\"\,\" , esto seleccionaría el interior de lo que buscamos, pero ahora como le diriamos que solo selecciones los caracteres no numericos ni letras? Estoy buscando pero no encuentro la forma.
por otra parte creo que alteryx tiene un pequeño fallo en esta estrcutura, porque con esa regex qu ehe puesto arriba, si tokeniza, saca bien las cosas sin el ":" y el "," pero cuando reemplaza, lo reemplaza todo, cosa que creo que funciona mal, porque se supone que los ( ) son para encapsular lo interior y no incluir lo delimitadores, pero no soy ningun experto.
Muchas gracias por la ayuda.
Podrás pasar aunque sea un pequeño ejemplo del json para revisarlo?
@Aguisande Encontré la solución gracias a un amigo que le ha pegado duro a las regex. Muchas gracias por la ayuda como siempre
Os dejo aqui la expresión por si a alguien le puede valer de base.
(?<!\:|,|{)"(?!\:|,|})|(?<!\:|,|{)",(?!")
saludos,
Podrás probar ambas alternativas para ver cuánto tardan en ejecutar cada una?
Maestro @Aguisande ,
He ejecutado ambas y tarda menos con la regex directamenre, ya que al hacer los separadores temporales tengo que hacer formula tool mas regex ya que para evitar desmontar y montar el json, tengo que hacerlo sin romper la cadena en trozos.
¿Es el resultado esperado?
Disculpa la demora en contestar, que no tuve rato para montar la solución que me planteabas hasta ahora.
Abrazo,
Hola,
Totalmente lógico el resultado.
Saludos