Remove the trailing and leading underscore characters. In between, underscore character will not be removed. Hence if String =”__E_xce__l____”, then answer would be “E_xce__l”
📌 Challenge Details and Links
ExcelBI Excel Challenge Number: 119
Challenge Difficulty: ⭐️
📥Download Sample File
📥Link to the solutions on LinkedIn
Solving the challenge of Trim Underscores at Ends with Power Query
Power Query solution 1 for Trim Underscores at Ends, proposed by Bo Rydobon 🇹🇭:
let
Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content],
Trimm = Table.TransformColumns(Source, {{"String", each Text.Trim(_, "_")}})
in
Trimm
Power Query solution 2 for Trim Underscores at Ends, proposed by Aditya Kumar Darak 🇮🇳:
let
Source = Excel.CurrentWorkbook(){[Name = "data"]}[Content],
Output = Table.AddColumn(Source, "Output", each Text.Trim([String], "_"))
in
Output
Power Query solution 3 for Trim Underscores at Ends, proposed by Alejandro Simón 🇵🇦 🇪🇸:
let
Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content],
Remove = Table.AddColumn(Source, "New", each Text.TrimStart([String], "_")),
Sol = Table.AddColumn(Remove, "Result", each Text.TrimEnd([New], "_"))[[Result]]
in
Sol
Power Query solution 4 for Trim Underscores at Ends, proposed by Luan Rodrigues:
let
Fonte = Tabela1,
sub1 = Table.ReplaceValue(Fonte, "_", " ", Replacer.ReplaceText, {"String"}),
trim = Table.TransformColumns(sub1, {{"String", Text.Trim, type text}}),
sub2 = Table.ReplaceValue(trim, " ", "_", Replacer.ReplaceText, {"String"})
in
sub2
Power Query solution 5 for Trim Underscores at Ends, proposed by Brian Julius:
let
Source = Table.FromRows(
Json.Document(
Binary.Decompress(
Binary.FromText(
"PYrBCkBAFEW/xWBnIVY+wEaRlc2kkzRFCT3zFv4eTdmdc8+11gwOdr0wY2YNcT2JX4I0eq7eSQiQJC1OZlC509fDqaCk39Qf/NMHHY4Tj7LzYgh5RTvJFX06Pg==",
BinaryEncoding.Base64
),
Compression.Deflate
)
),
let
_t = ((type nullable text) meta [Serialized.Text = true])
in
type table [String = _t]
),
Dupe = Table.DuplicateColumn(Source, "String", "Answer"),
RunRegexR = R.Execute(
"library(stringr)#(lf)df <- dataset#(lf)df$Answer <- str_replace_all(df$Answer, ""^(?:_+)|(?:_+)$"", """")",
[dataset = Dupe]
),
Result = RunRegexR{[Name = "df"]}[Value]
in
Result
Power Query solution 6 for Trim Underscores at Ends, proposed by Matthias Friedmann:
let
Source = Excel.CurrentWorkbook(){[Name = "Trim"]}[Content],
Trimmed = Table.TransformColumns(Source, {{"String", each Text.Trim(_, "_")}})
in
Trimmed
Power Query solution 7 for Trim Underscores at Ends, proposed by Rafael González B.:
let
Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content],
ConvertToList = Table.TransformColumns(Source, {"String", Text.ToList}),
TableCheck = Table.AddColumn(
ConvertToList,
"Check",
each Table.FromRows(List.Zip({[String], List.Transform([String], each Text.Contains(_, "_"))}))
),
RemoveTrim = Table.AddColumn(
TableCheck,
"Answer",
each Text.Combine(
Table.RemoveColumns(
Table.RemoveLastN(Table.Skip([Check], each [Column2] = true), each [Column2] = true),
"Column2"
)[Column1]
)
),
Result = Table.SelectColumns(RemoveTrim, {"Answer"})
in
Result
Power Query solution 8 for Trim Underscores at Ends, proposed by Jan Willem Van Holst:
let
FXBegin = (inputText) =>
if Text.Range(inputText, 0, 1) <> "_" then
inputText
else
@FXBegin(Text.RemoveRange(inputText, 0)),
FXEnd = (inputText) =>
if Text.Range(inputText, Text.Length(inputText) - 1, 1) <> "_" then
inputText
else
@FXEnd(Text.RemoveRange(inputText, Text.Length(inputText) - 1)),
Source = Table.FromRows(
Json.Document(
Binary.Decompress(
Binary.FromText(
"PYrBCkBAFEW/xWBnIVY+wEaRlc2kkzRFCT3zFv4eTdmdc8+11gwOdr0wY2YNcT2JX4I0eq7eSQiQJC1OZlC509fDqaCk39Qf/NMHHY4Tj7LzYgh5RTvJFX06Pg==",
BinaryEncoding.Base64
),
Compression.Deflate
)
),
let
_t = ((type nullable text) meta [Serialized.Text = true])
in
type table [String = _t]
),
#"Added Custom" = Table.AddColumn(Source, "Answer", each FXBegin(FXEnd([String])))
in
#"Added Custom"
Power Query solution 9 for Trim Underscores at Ends, proposed by Debbie Compton:
= Table.TransformColumns(#"Duplicated Column",{{"String - Copy", each Text.Trim(_,{"_"}), type text}})
Solving the challenge of Trim Underscores at Ends with Excel
Excel solution 1 for Trim Underscores at Ends, proposed by Bo Rydobon 🇹🇭:
=MAP(
A2:A8,
LAMBDA(
a,
LET(
b,
N(
MID(
a,
SEQUENCE(
LEN(
a
)
),
1
)<>"_"
),
MID(
LEFT(
a,
XMATCH(
1,
b,
,
-1
)
),
XMATCH(
1,
b
),
99
)
)
)
)
Excel solution 2 for Trim Underscores at Ends, proposed by Bo Rydobon 🇹🇭:
=REDUCE(A2:A8,
SEQUENCE(
20
),
LAMBDA(a,
z,
LET(l,
LEFT(
a
)="_",
MID(a,
1+l,
LEN(
a
)-l-(RIGHT(
a
)="_")))))
Excel solution 3 for Trim Underscores at Ends, proposed by Bo Rydobon 🇹🇭:
=MAP(
A2:A8,
LAMBDA(
a,
LET(
b,
TEXTSPLIT(
a,
,
"_"
),
TEXTJOIN(
"_",
0,
DROP(
TAKE(
b,
XMATCH(
"?*",
b,
2,
-1
)
),
MATCH(
"?*",
b,
)-1
)
)
)
)
)
Excel solution 4 for Trim Underscores at Ends, proposed by Rick Rothstein:
=MAP(
A2:A8,
LAMBDA(
x,
LET(
r,
SEQUENCE(
LEN(
x
)
),
a,
IF(
MID(
x,
r,
1
)<>"_",
r
),
m,
MIN(
a
),
MID(
x,
m,
MAX(
a
)-m+1
)
)
)
)
Excel solution 5 for Trim Underscores at Ends, proposed by John V.:
=MAP(A2:A8,
LAMBDA(x,
LET(f,
LAMBDA(b,
t,
MATCH(b,
1/(MID(
x,
SEQUENCE(
LEN(
x
)
),
1
)<>"_"),
t)),
MID(
x,
f(
1,
0
),
1+f(
2,
1
)-f(
1,
0
)
))))
✅=MAP(
A2:A8,
LAMBDA(
x,
LET(
s,
SEQUENCE(
LEN(
x
)
),
n,
IF(
MID(
x,
s,
1
)<>"_",
s
),
m,
MIN(
n
),
MID(
x,
m,
1+MAX(
n
)-m
)
)
)
)
Excel solution 6 for Trim Underscores at Ends, proposed by محمد حلمي:
=LET(
L,
LAMBDA(
x,
TEXTAFTER(
x,
MID(
REPT(
"_",
10
),
1,
ROW(
1:10
)
)
)
),
LL,
LAMBDA(
x,
MAP(
x,
LAMBDA(
a,
CONCAT(
MID(
a,
LEN(
a
)-SEQUENCE(
LEN(
a
)
)+1,
1
)
)
)
)
),
LL(
L(
LL(
L(
"_"&A2:A8&"_"
)
)
)
)
)
Unsuccessful attempts
=SUBSTITUTE(
TRIM(
SUBSTITUTE(
A2:A8,
"_",
" "
)
),
" ",
"_"
)
=TEXTAFTER(
"_"&A2:A8&"_",
MID(
REPT(
"_",
10
),
1,
ROW(
1:10
)
)
)
I think TEXTAFTER much better than TEXTBEFORE
I hope that the result will be made of these
=LET(
a,
MID(
REPT(
"_",
10
),
1,
ROW(
1:10
)
),
TEXTBEFORE(
TEXTAFTER(
"_"&A2:A8&"_",
a
),
a,
-1
)
)
Excel solution 7 for Trim Underscores at Ends, proposed by محمد حلمي:
=REDUCE(
A2:A8,
SEQUENCE(
20
),
LAMBDA(
a,
v,
LET(
r,
IF(
LEFT(
a
)="_",
MID(
a,
2,
99
),
a
),
IF(
RIGHT(
r
)="_",
MID(
r,
1,
LEN(
r
)-1
),
r
)
)
)
)
Excel solution 8 for Trim Underscores at Ends, proposed by 🇰🇷 Taeyong Shin:
=REGEXREPLACE(
A2:A8,
"^_+|_+$",
)
Excel solution 9 for Trim Underscores at Ends, proposed by Kris Jaganah:
=MAP(A2:A8,
LAMBDA(x,
LET(b,
LEN(
x
),
c,
SEQUENCE(
b
),
d,
MID(
x,
c,
1
),
e,
MAX(
IF(
d<>"_",
c,
d
)
),
f,
MIN(
IF(
d<>"_",
c,
d
)
),
CONCAT(FILTER(d,
(c>=f)*(c<=e))))))
Excel solution 10 for Trim Underscores at Ends, proposed by Julian Poeltl:
=MAP(A2:A8,
LAMBDA(S,
LET(SP,
MID(
S,
SEQUENCE(
LEN(
S
)
),
1
),
U,
--(SP<>"_"),
CONCAT(DROP(DROP(SP,
-(ROWS(
U
)-XMATCH(
1,
U,
,
-1
))),
XMATCH(
1,
U
)-1)))))
Excel solution 11 for Trim Underscores at Ends, proposed by Timothée BLIOT:
=MAP(
A2:A8,
LAMBDA(
x,
CONCAT(
LET(
A,
SEQUENCE(
LEN(
x
)
),
B,
MID(
x,
A,
1
),
D,
IF(
B="_",
B,
A
),
MID(
x,
SEQUENCE(
MAX(
D
)-MIN(
D
)+1,
,
MIN(
D
)
),
1
)
)
)
)
)
Excel solution 12 for Trim Underscores at Ends, proposed by Hussein SATOUR:
=MAP(A2:A8,
LAMBDA(x,
LET(
a,
MID(
x,
SEQUENCE(
LEN(
x
)
),
1
),
b,
XMATCH(1,
(a <> "_") * 1),
c,
XMATCH(1,
(a <> "_") * 1,
,
-1),
MID(
x,
b,
c - b + 1
))))
Excel solution 13 for Trim Underscores at Ends, proposed by Charles Roldan:
=MAP(
A2:A8,
LAMBDA(
String,
LET(
Array,
MID(
String,
SEQUENCE(
LEN(
String
)
),
1
),
_END,
LAMBDA(
SearchMode,
XMATCH(
FALSE,
Array="_",
,
SearchMode
)
),
CONCAT(
DROP(
TAKE(
Array,
_END(
-1
)
),
_END(
1
) - 1
)
)
)
)
)
Excel solution 14 for Trim Underscores at Ends, proposed by Jaroslaw Kujawa:
=LAMBDA(a;
LET(l;
XMATCH(1;
1*(MID(
a;
SEQUENCE(
;
LEN(
a
)
);
1
)_));
r;
XMATCH(1;
1*(MID(
a;
SEQUENCE(
;
LEN(
a
);
LEN(
a
);
-1
);
1
)_));
MID(
a;
l;
LEN(
a
)-l-r+2
)))(A2)
Excel solution 15 for Trim Underscores at Ends, proposed by Stefan Olsson:
=arrayformula(
REGEXEXTRACT(
A2:A8,
"^_*(.*?)_*$"
)
)
Excel solution 16 for Trim Underscores at Ends, proposed by Guillermo Arroyo:
=MAP(
A2:A8,
LAMBDA(
a,
LET(
f,
LAMBDA(
s,
t,
LET(
l,
LEN(
s
),
i,
CHOOSE(
t,
1,
l
),
p,
CHOOSE(
t,
1,
-1
),
REDUCE(
"",
MID(
s,
SEQUENCE(
,
l,
i,
p
),
1
),
LAMBDA(
b,
c,
IF(
AND(
b="",
c="_"
),
"",
CHOOSE(
t,
b&c,
c&b
)
)
)
)
)
),
f(
f(
a,
1
),
2
)
)
)
)
Excel solution 17 for Trim Underscores at Ends, proposed by Daniel Garzia:
=MAP(
A2:A8,
LAMBDA(
x,
LET(
m,
MID(
x,
SEQUENCE(
LEN(
x
)
),
1
)<>"_",
f,
XMATCH(
TRUE,
m
),
MID(
x,
f,
MATCH(
2,
1/m
)-f+1
)
)
)
)
Excel solution 18 for Trim Underscores at Ends, proposed by roberto mensa:
=LET(
a,
SEQUENCE(
,
10
),
r,
REPT(
"_",
a
),
s,
MAX(
COUNTIF(
A1,
r&"*"
)*a
),
e,
MAX(
COUNTIF(
A1,
"*"&r
)*a
),
MID(
A1,
s+1,
LEN(
A1
)-s-e
)
)
Excel solution 19 for Trim Underscores at Ends, proposed by Tushar Mehta:
=LAMBDA(
rng,
LET(
_name,
"Remove leading and trailing underscores",
removeLeading,
LAMBDA(
f,
s,
IF(
LEFT(
s,
1
)="_",
f(
f,
RIGHT(
s,
LEN(
s
)-1
)
),
s
)
),
removeTrailing,
LAMBDA(
f,
s,
IF(
RIGHT(
s,
1
)="_",
f(
f,
LEFT(
s,
LEN(
s
)-1
)
),
s
)
),
MAP(
rng,
LAMBDA(
s,
removeTrailing(
removeTrailing,
removeLeading(
removeLeading,
s
)
)
)
)
)
)(A2:A8)
Excel solution 20 for Trim Underscores at Ends, proposed by Victor Yemitan:
=LET(
data,
A2:A8,
u,
"_",
REDUCE(
data,
SEQUENCE(
MAX(
LEN(
data
)
)
),
LAMBDA(
x,
y,
IF(
LEFT(
x
)=u,
REPLACE(
x,
1,
1,
""
),
IF(
RIGHT(
x
)=u,
REPLACE(
x,
LEN(
x
),
1,
""
),
x
)
)
)
)
)
Solving the challenge of Trim Underscores at Ends with SQL
SQL solution 1 for Trim Underscores at Ends, proposed by Zoran Milokanović:
WITH /* Microsoft SQL Server 2019 */
DATA
AS
(
SELECT 'Ve__nus_' AS STRING UNION ALL
SELECT '_#Earth_' AS STRING UNION ALL
SELECT 'Jupiter' AS STRING UNION ALL
SELECT '___$$M_erc__ury%____' AS STRING UNION ALL
SELECT '2_3_Pluto_____' AS STRING UNION ALL
SELECT '____N_e_p_t_u_n__e__' AS STRING UNION ALL
SELECT '09_Mars!__' AS STRING
)
SELECT
D.STRING
,TRIM('_' FROM D.STRING) AS RESULT
FROM DATA D
;
&&
