Forum Discussion
Power M - Find Numbers Before Specific Text
Hello, I am looking to extract numbers before specific text ("BUP"). I think it is possible we may need to address " BUP" specifically, as users would likely put a space between number and "BUP". Example below:
1. "40 BUP" = 40
2. "@LOCATION 25 BUP" = 25
3. "hello_world" = 0
Appreciate the help.
Use this in a custom column
= if Text.End([Data],3)="BUP" then Text.Replace(List.Last(Text.Split(Text.Select(Text.Replace([Data]," BUP","BUP"),{"0".."9"," ","B","U","P"})," ")),"BUP","") else 0Full test code
let Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMjFQcAoNUIrViVZy8PF3dgzx9PdTMDKFC2ak5uTkx5fnF+WkoCoyMoUpMTGNKTUwMDKDkHDNsQA=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Data = _t]), #"Added Custom" = Table.AddColumn(Source, "Custom", each if Text.End([Data],3)="BUP" then Text.Replace(List.Last(Text.Split(Text.Select(Text.Replace([Data]," BUP","BUP"),{"0".."9"," ","B","U","P"})," ")),"BUP","") else 0, type number) in #"Added Custom"
3 Replies
- Vijay_A_VermaMost Valuable Professional
In a custom column, put following formula
= Text.Select(List.First(Text.Split(Text.Replace([Data]," ","")&"0BUP","BUP")),{"0".."9"})See the working here - Open a blank query - Home - Advanced Editor - Remove everything from there and paste the below code to test
let Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMjFQcAoNUIrViVZy8PF3dgzx9PdTMDKFC2ak5uTkx5fnF+WkoCoyMgUriQUA", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Data = _t]), #"Added Custom" = Table.AddColumn(Source, "Custom", each Text.Select(List.First(Text.Split(Text.Replace([Data]," ","")&"0BUP","BUP")),{"0".."9"}), type number) in #"Added Custom"- ryan_b_123Frequent Visitor
Vijay_A_Verma - This solution works perfectly (per my description) but it encounters an issue that I didn't anticipate:
"45&& 25 BUP" = "4525 BUP" (with your solution). Ideally it would return "25 BUP".
Is there a way to ammend the code so it will only capture numbers before the string "BUP"? Once a non-number field is encountered, it will not return subsequent characters.
Thank you so much for your help! You're a life saver : )
- Vijay_A_VermaMost Valuable Professional
Use this in a custom column
= if Text.End([Data],3)="BUP" then Text.Replace(List.Last(Text.Split(Text.Select(Text.Replace([Data]," BUP","BUP"),{"0".."9"," ","B","U","P"})," ")),"BUP","") else 0Full test code
let Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMjFQcAoNUIrViVZy8PF3dgzx9PdTMDKFC2ak5uTkx5fnF+WkoCoyMoUpMTGNKTUwMDKDkHDNsQA=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Data = _t]), #"Added Custom" = Table.AddColumn(Source, "Custom", each if Text.End([Data],3)="BUP" then Text.Replace(List.Last(Text.Split(Text.Select(Text.Replace([Data]," BUP","BUP"),{"0".."9"," ","B","U","P"})," ")),"BUP","") else 0, type number) in #"Added Custom"