Forum Discussion

Floriankx's avatar
Floriankx
Solution Sage
8 years ago
Solved

Power Query - Replace multiple substrings in one column

Hello,

 

I am looking for a solution to replace multiple substrings at once.

For Example:

CategoryCategory after
AA_AAB_A
aa_BAB_B
AA_CAB_C
BB_ADE_A
BB_BDE_B
BB_CDE_C

 

so AA->AB, aa->AB and BB->DE.

 

I found something here, but it is not able to replace substrings and it creates three single steps.

My aim would be to do it in one single step.

 

I'm really looking forward for your feedback.

4 Replies

  • Text.Replace is case sensitive.

    Text.Replace([Category],"AA","AB")

    To make the three replacements you can nest it.

    Text.Replace(Text.Replace(Text.Replace([Category],"BB","DE"),"aa","AB"),"AA","AB")

     

  • dufoq3's avatar
    dufoq3
    Community Champion

    I know this is old topic, but maybe it helps to someone...

     

    Let's assume that you have table with replacement pairs called t_Replacements which contains Find and Replace columns:

     

    Then you can add to your table new Custom Column and paste there this code
    (Column with your text should have name Column1)

     

    [ 
    	v_replacingTable = Table.Distinct(Table.TransformColumns(t_Replacements,{{"Find", Text.Lower, type text}}), "Find"),
    	v_replacingTableAsListOfLists = Table.ToRows(v_replacingTable),
    	v_textAsList = Text.Split([Column1], "_"),
    	v_replacedTextAsList = List.ReplaceMatchingItems(v_textAsList, v_replacingTableAsListOfLists, Comparer.OrdinalIgnoreCase),
    	v_replacedTextAsText = Text.Combine(v_replacedTextAsList, "_")
    ][v_replacedTextAsText]

     

     

    Result:

     

    Note:

    If you want to debug this code - just delete [v_replacedTextAsText] after ] at the end of the code and then you can expand the record to see result of each step/variable.