Limpieza de datos – Sustitución condicional por lista de caracteres especiales

Un usuario Pregunto ✅

crispybacon

Hola a todos,

actualmente estoy enfrentando un problema en PQ que no estoy seguro de cómo resolver.

Básicamente, necesito limpiar un campo de texto libre creado por los usuarios de mi aplicación de la que obtengo los datos.

Suponiendo que tengo la siguiente cadena: «aaa-bb bb-ccc//dd?eee», me gustaría «tener aaa_bb_bb_ccc__dd_eee»

Dado que se trata de un campo de texto libre, la cantidad de caracteres especiales que utilizan como delimitadores puede ser realmente grande. Entonces, ¿hay alguna manera de tener una lista con todos los caracteres especiales y luego verificar la cadena de cada registro si aparece, y si aparece alguno de los caracteres especiales para reemplazarlos por «_».

Me gustaría evitar tener todos estos pasos de transformaciones de reemplazo adicionales.

Necesito ese paso porque luego necesito hacer una categorización donde hago algo como

each if List.ContainsAny(Text.Split([col], "_"), checklist1) = true then "output" else if [and so on]

Estaba buscando en Google pero no pude encontrar ninguna fuente útil para el escenario anterior. Se agradece cualquier enlace a un recurso o idea :).

Salud,

cristiano

Rocco_sprmnt21

En respuesta a spg_vizcubo

let
    Source = "aaa-bb bb-ccc//dd?eee",

    special=Splitter.SplitTextByRepeatedLengths(1)(Source),

    res=Text.Combine( List.Transform(special, each if List.Contains({"a".."z"}, _) then _ else Text.Replace(_, _, "_")))


in
res

spg_vizcubo

Hola @chrispybacon

Probablemente esto ayudaría

https://community.powerbi.com/t5/Desktop/Power-Query-Replace-multiple-substrings-in-one-column/td-p/…

¡Aprecie sus felicitaciones!

Si resuelvo su problema, acepte esto como una solución.

Agrégame en Linked In, visita mi blog vizcube.biz
suscríbete a mi canal de youtube

Rocco_sprmnt21

En respuesta a spg_vizcubo

let
    Source = "aaa-bb bb-ccc//dd?eee",

    special=Splitter.SplitTextByRepeatedLengths(1)(Source),

    res=Text.Combine( List.Transform(special, each if List.Contains({"a".."z"}, _) then _ else Text.Replace(_, _, "_")))


in
res

crispybacon

En respuesta a Rocco_sprmnt21

Hola @Rocco_sprmnt21,

¡Ese enfoque funcionó muy bien! Eso también me ayudó a aprender algo sobre el uso de «_». Perdón por la respuesta tardía, estaba de vacaciones;).

Atentamente,

cristiano

spg_vizcubo

En respuesta a Rocco_sprmnt21

@ Rocco_sprmnt21 ¿Cómo podemos reemplazar Source como tabla?

Rocco_sprmnt21

En respuesta a spg_vizcubo

@spg_vizcubesi tiene la intención de aplicar las transformaciones a los valores de alguna columna de una tabla, esto se puede hacer definiendo una función que toma como entrada una cadena y da como salida una cadena transformada y usándola con la función agregar columna personalizada o algo así transformar columnas.

cual es exactamente tu caso

Rocco_sprmnt21

En respuesta a Rocco_sprmnt21

otra forma más de cambiar el conjunto de caracteres «no estándar» a un carácter predeterminado dado:

let
str_in="aaa-bb bb-ccc//dd?eee",
str_out=Text.Combine( List.Transform(Splitter.SplitTextByRepeatedLengths(1)(str_in), each Record.FieldOrDefault(Record.FromList({"a".."z"},{"a".."z"}),_ ,"_") ))
in
str_out

Deja un comentario

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