Forum Discussion

aqeel_shaikh's avatar
aqeel_shaikh
Helper III
2 years ago
Solved

How to Remove special character from Alphanumeric character

In the case study, i want to remove special character which is "-" hyphen if it is coming between Alphanumeric character.
if it is between numeric should not be removed. 

can you please help me with the query

Sample:

1) XYZ-1-ACD - expectation is XYZ1ACD
2) 123-456-XYZ - expectation is 123-456XYZ.

  • Hi aqeel_shaikh, check this.

     

    Result

     

    let
        Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WioiM0jXUdXR2UYrViVYyNDLWNTE10wWKKsXGAgA=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Column1 = _t]),
        Ad_Cleaned = Table.AddColumn(Source, "Cleaned", each 
            [ lst = {"0".."9"},
              a1 = Splitter.SplitTextByCharacterTransition(each true, (x)=> not List.Contains(lst, x))([Column1]),
              a2 = Text.Combine(List.RemoveItems(a1, {"-"})),
              b1 = Splitter.SplitTextByCharacterTransition((x)=> not List.Contains(lst, x), each true)(a2),
              b2 = Text.Combine(List.RemoveItems(b1, {"-"}))
            ][b2], type text)
    in
        Ad_Cleaned

     

  • dufoq3's avatar
    dufoq3
    2 years ago

    Try this:

    let
        Source = Excel.Workbook(File.Contents("C:\Users\s441801\OneDrive - Emirates Group\General - AQEEL\Power query\POWER Q TEST SAMPLE.xlsx"), null, true),
        Sheet1_Sheet = Source{[Item="Sheet1",Kind="Sheet"]}[Data],
        Ad_Cleaned = Table.AddColumn(Sheet1_Sheet, "Cleaned", each 
            [ lst = {"0".."9"},
              a1 = Splitter.SplitTextByCharacterTransition(each true, (x)=> not List.Contains(lst, x))([Column1]),
              a2 = Text.Combine(List.RemoveItems(a1, {"-"})),
              b1 = Splitter.SplitTextByCharacterTransition((x)=> not List.Contains(lst, x), each true)(a2),
              b2 = Text.Combine(List.RemoveItems(b1, {"-"}))
            ][b2], type text)
    in
        Ad_Cleaned

13 Replies

  • dufoq3's avatar
    dufoq3
    Community Champion

    Hi aqeel_shaikh, check this.

     

    Result

     

    let
        Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WioiM0jXUdXR2UYrViVYyNDLWNTE10wWKKsXGAgA=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Column1 = _t]),
        Ad_Cleaned = Table.AddColumn(Source, "Cleaned", each 
            [ lst = {"0".."9"},
              a1 = Splitter.SplitTextByCharacterTransition(each true, (x)=> not List.Contains(lst, x))([Column1]),
              a2 = Text.Combine(List.RemoveItems(a1, {"-"})),
              b1 = Splitter.SplitTextByCharacterTransition((x)=> not List.Contains(lst, x), each true)(a2),
              b2 = Text.Combine(List.RemoveItems(b1, {"-"}))
            ][b2], type text)
    in
        Ad_Cleaned

     

    • aqeel_shaikh's avatar
      aqeel_shaikh
      Helper III

      getting below error

       




      let
      Source = Excel.Workbook(File.Contents("C:\Users\General \Power query\POWER Q TEST SAMPLE.xlsx"), null, true),
      Sheet1_Sheet = Source{[Item="Sheet1",Kind="Sheet"]}[Data],
      #"Changed Type" = Table.TransformColumnTypes(Sheet1_Sheet,{{"Column1", type text}}),
      Ad_Cleaned = Table.AddColumn(Source, "Cleaned", each
      [ lst = {"0".."9"},
      a1 = Splitter.SplitTextByCharacterTransition(each true, (x)=> not List.Contains(lst, x))([Column1]),
      a2 = Text.Combine(List.RemoveItems(a1, {"-"})),
      b1 = Splitter.SplitTextByCharacterTransition((x)=> not List.Contains(lst, x), each true)(a2),
      b2 = Text.Combine(List.RemoveItems(b1, {"-"}))
      ][b2], type text
      in
      #"Changed Type"

      • dufoq3's avatar
        dufoq3
        Community Champion

        Try this:

        let
            Source = Excel.Workbook(File.Contents("C:\Users\s441801\OneDrive - Emirates Group\General - AQEEL\Power query\POWER Q TEST SAMPLE.xlsx"), null, true),
            Sheet1_Sheet = Source{[Item="Sheet1",Kind="Sheet"]}[Data],
            Ad_Cleaned = Table.AddColumn(Sheet1_Sheet, "Cleaned", each 
                [ lst = {"0".."9"},
                  a1 = Splitter.SplitTextByCharacterTransition(each true, (x)=> not List.Contains(lst, x))([Column1]),
                  a2 = Text.Combine(List.RemoveItems(a1, {"-"})),
                  b1 = Splitter.SplitTextByCharacterTransition((x)=> not List.Contains(lst, x), each true)(a2),
                  b2 = Text.Combine(List.RemoveItems(b1, {"-"}))
                ][b2], type text)
        in
            Ad_Cleaned
  • RemoveHyphens =
    try this and let me know if this works:
    VAR inputText = [YourColumn]
    VAR length = LEN(inputText)

    VAR result =
    GENERATESERIES(1, length, 1)
    RETURN
    VAR currentIndex = VALUE([Value])
    VAR currentChar = MID(inputText, currentIndex, 1)
    VAR prevChar = MID(inputText, currentIndex - 1, 1)
    VAR nextChar = MID(inputText, currentIndex + 1, 1)
    RETURN
    IF(
    currentChar = "-" &&
    (ISALPHA(prevChar) && ISALPHA(nextChar) || ISALPHA(prevChar) && ISNUMERIC(nextChar) || ISNUMERIC(prevChar) && ISALPHA(nextChar)),
    "",
    currentChar
    )
    )
    VAR modifiedText = CONCATENATEX(result, result, "")
    RETURN modifiedText

     

    My blog:
    https://analyticpulse.blogspot.com/2024/03/superstore-sales-2022-vs-2023-year-on.html
    https://analyticpulse.blogspot.com/
    https://analyticpulse.blogspot.com/2024/04/case-study-powerbi-dashboard-developer.html

    See my Pins :
    https://pin.it/5aoqgZUft
    https://in.pinterest.com/AnalyticPulse/