When cleaning dirty data, you might have used the Trim-function (Text.TrimStart or Text.TrimEnd) to delete leading or trailing whitespace from your strings. However, did you know that you could use these functions as well to delete any other characters as well from the start or end of a string? Trimming text with custom characters is pretty straightforward:
Task: Trimming text with custom characters
Say you have a column with values like so
and want to delete every number at the end and also every “-” that is directly connected with a number. So that the final output shall look like so:
Optional parameter
By default, you feed just one argument into the Text.TrimStart or Text.TrimEnd function: The string whose whitespace characters shall be removed.
Text.TrimEnd(text as nullable text, optional trim as any) as nullable text
But the second argument lets you define a list of your own characters to be removed respectively. So I can create a list with all the characters that shall be removed from the end like so:
{"0".."9"} & {"-"}
This concatenates 2 lists: The first list contains 10 elements: All numbers as strings. The second list has just one element in it: “-“. I have to put this element into a list as well for being able to use the ampersand (“&”) as an easy concatenator here.
So the full expression for the “Add custom column” dialogue looks like so:
Text.TrimEnd( [MyColumnName], {"0".."9"} & {"-"} )
To see this in action, you can simply paste this code into the advanced editor and follow the steps:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
let | |
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WcvL389AN0PXVNTRTitWJVnJ29NN18tF1NDQHc8GEhYVukK6js66hpVJsLAA=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type text) meta [Serialized.Text = true]) in type table [product_name = _t]), | |
#"Changed Type" = Table.TransformColumnTypes(Source,{{"product_name", type text}}), | |
#"Added Custom" = Table.AddColumn(#"Changed Type", "Custom", each Text.TrimEnd([product_name], {"0".."9"} & {"-"})) | |
in | |
#"Added Custom" |
Enjoy and stay queryious 😉
Why didn’t you use {“0″..”9″,”-“} ?
I’m so used to the concatanation 🙂
interesting! The “&” puts the two lists {“0”..”9″} and {“-“} into one list: elements 1-10 are the numbers (ok: numbers as texts…) 0 … 9, element 11 is “-“.
I primarily expected it to become a list of 10 elements, each being the concatenation of each of the elements of the first list with a trailing “-“: { 0- | 1- | 2- | … } and so on.
How to realize such a pattern: to remove all trailing numbers, as long as they are followed by a minus (“-“)?
Thanks in advance!