Lenguaje M: recuperar una cadena de números contiguos de una cadena

Un usuario Pregunto ✅

Anónimo

Hola, todos,

¿Hay alguna forma de recuperar una cadena de contiguo números de una cadena?

El único requisito es que los caracteres numéricos sean contiguo.

Déjame ilustrar:

1) ABCDE234 -> 234

2) ABC456-DD -> 456

3) 134ABC-CC -> 134

4) CC-543_FF -> 543

5) CC_FF-334567 -> 334567

Gracias por adelantado.

Jason.

smpa01

@Anónimo Por cierto, también hay una solución R para este problema.

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WcnRydnE1MjZRitUBc0xMzXRdXMA8Q2MToICuszOY5+ysa2piHO/mBuUBWbrGxkDl5kqxsQA=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type text) meta [Serialized.Text = true]) in type table [Column1 = _t]),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Column1", type text}}),
    #"Run R script" = R.Execute("https://community.powerbi.com/t5/Desktop/M-Language-Retrieve-String-of-Contiguous-Numbers-from-a-String/m-p/#"dataset' holds the input data for this script#(lf)x<-dataset#(lf)x#(lf)library(stringr)#(lf)numextract <- function(string){str_extract(string, ""\d+\.*\d*"")}#(lf)x$result<-as.numeric(numextract(x$Column1))",[dataset=#"Changed Type"]),
    #"""x""" = #"Run R script"{[Name="x"]}[Value]
in
    #"""x"""

Capture.JPG

smpa01

@Anónimo Por cierto, también hay una solución R para este problema.

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WcnRydnE1MjZRitUBc0xMzXRdXMA8Q2MToICuszOY5+ysa2piHO/mBuUBWbrGxkDl5kqxsQA=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type text) meta [Serialized.Text = true]) in type table [Column1 = _t]),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Column1", type text}}),
    #"Run R script" = R.Execute("https://community.powerbi.com/t5/Desktop/M-Language-Retrieve-String-of-Contiguous-Numbers-from-a-String/m-p/#"dataset' holds the input data for this script#(lf)x<-dataset#(lf)x#(lf)library(stringr)#(lf)numextract <- function(string){str_extract(string, ""\d+\.*\d*"")}#(lf)x$result<-as.numeric(numextract(x$Column1))",[dataset=#"Changed Type"]),
    #"""x""" = #"Run R script"{[Name="x"]}[Value]
in
    #"""x"""

Capture.JPG

Anónimo

En respuesta a smpa01

@ smpa01 Bastante impresionante.

Me gusta la parte donde usas

intente Number.From ([Value]) de lo contrario -999

Sin embargo, me perdiste cuando comenzaste a hacer esto:

dejar
Fuente = [AD],
# «Otras columnas eliminadas» = Table.SelectColumns (Fuente, {«Personalizado»}),
Personalizado = # «Otras columnas eliminadas»[Custom]
en
Personalizado

No estoy seguro de lo que está pasando aquí …

smpa01

En respuesta a Anónimo

@Anonymousit está haciendo esto. Solo estoy interesado en la columna personalizada para poder convertirla en una lista.

Agrupé los datos por Columna1 para poder ejecutar lo siguiente en cada grupo de grupos

dejar
Fuente = [AD],
# «Otras columnas eliminadas» = Table.SelectColumns (Fuente, {«Personalizado»}),
Personalizado = # «Otras columnas eliminadas»[Custom]
en
Personalizado

Capture.JPG

smpa01

@Anonymoussure que puede

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WcnRydnE1MjZRitUBc0xMzXRdXMA8Q2MToICuszOY5+ysa2piHO/mBuUBWbrGxkDl5kqxsQA=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type text) meta [Serialized.Text = true]) in type table [Column1 = _t]),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Column1", type text}}),
    #"Duplicated Column" = Table.DuplicateColumn(#"Changed Type", "Column1", "Column1 - Copy"),
    #"Split Column by Position" = Table.SplitColumn(#"Duplicated Column", "Column1 - Copy", Splitter.SplitTextByRepeatedLengths(1), {"Column1 - Copy.1", "Column1 - Copy.2", "Column1 - Copy.3", "Column1 - Copy.4", "Column1 - Copy.5", "Column1 - Copy.6", "Column1 - Copy.7", "Column1 - Copy.8", "Column1 - Copy.9", "Column1 - Copy.10", "Column1 - Copy.11", "Column1 - Copy.12"}),
    #"Changed Type1" = Table.TransformColumnTypes(#"Split Column by Position",{{"Column1 - Copy.1", type text}, {"Column1 - Copy.2", type text}, {"Column1 - Copy.3", type text}, {"Column1 - Copy.4", type text}, {"Column1 - Copy.5", type text}, {"Column1 - Copy.6", type text}, {"Column1 - Copy.7", type text}, {"Column1 - Copy.8", type text}, {"Column1 - Copy.9", type text}, {"Column1 - Copy.10", Int64.Type}, {"Column1 - Copy.11", Int64.Type}, {"Column1 - Copy.12", Int64.Type}}),
    #"Unpivoted Other Columns" = Table.UnpivotOtherColumns(#"Changed Type1", {"Column1"}, "Attribute", "Value"),
    #"Removed Columns" = Table.RemoveColumns(#"Unpivoted Other Columns",{"Attribute"}),
    #"Added Custom" = Table.AddColumn(#"Removed Columns", "Custom", each try Number.From([Value]) otherwise -999),
    #"Filtered Rows" = Table.SelectRows(#"Added Custom", each ([Custom] <> -999)),
    #"Removed Columns1" = Table.RemoveColumns(#"Filtered Rows",{"Value"}),
    #"Grouped Rows" = Table.Group(#"Removed Columns1", {"Column1"}, {{"AD", each _, type table}}),
    #"Added Custom1" = Table.AddColumn(#"Grouped Rows", "Custom", each let
    Source = [AD],
    #"Removed Other Columns" = Table.SelectColumns(Source,{"Custom"}),
    Custom = #"Removed Other Columns"[Custom]
in
    Custom),
    #"Removed Columns2" = Table.RemoveColumns(#"Added Custom1",{"AD"}),
    #"Extracted Values" = Table.TransformColumns(#"Removed Columns2", {"Custom", each Text.Combine(List.Transform(_, Text.From)), type text}),
    #"Changed Type2" = Table.TransformColumnTypes(#"Extracted Values",{{"Custom", Int64.Type}})
in
#"Changed Type2"

Capture.JPG

Deja un comentario

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