Home » Extract Signed Numbers from Text

Extract Signed Numbers from Text

Extract the unique positive and negative numbers if they are immediately preceded by either plus or minus sign. Ex. 5Q8Y+6R-34L12 Only 6 is preceded by + and 34 is preceded by –

📌 Challenge Details and Links
ExcelBI Excel Challenge Number: 383
Challenge Difficulty: ⭐️
📥Download Sample File
📥Link to the solutions on LinkedIn

Solving the challenge of Extract Signed Numbers from Text with Power Query

Power Query solution 1 for Extract Signed Numbers from Text, proposed by Alejandro Simón 🇵🇦 🇪🇸:
let
  Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content], 
  Sol = Table.Combine(
    Table.AddColumn(
      Source, 
      "A", 
      each 
        let
          z = List.Transform(
            {"+", "-"}, 
            (y) =>
              let
                a = List.Skip(Text.Split([Strings], y)), 
                b = List.Transform(
                  {0 .. List.Count(a) - 1}, 
                  each List.Max(
                    List.Transform(
                      {1 .. Text.Length(a{_})}, 
                      (x) => try Number.From(Text.Range(a{_}, 0, x)) otherwise null
                    )
                  )
                ), 
                c = Text.Combine(List.Transform(List.Distinct(b), Text.From), ", ")
              in
                c
          )
        in
          Table.FromRows({z}, {"Positive", "Negative"})
    )[A]
  )
in
  Sol
Power Query solution 2 for Extract Signed Numbers from Text, proposed by Luan Rodrigues:
let
  Fonte = Tabela1, 
  tab = Table.AddColumn(
    Fonte, 
    "Personalizar", 
    each [
      a = Splitter.SplitTextByCharacterTransition(
        {"A" .. "Z", "0" .. "9", "+", "-"}, 
        {"+", "-", "A" .. "Z"}
      )([Strings]), 
      b = List.Distinct(
        List.Select(
          a, 
          each (Text.Start(_, 1) = "+" or Text.Start(_, 1) = "-") and Text.Length(_) <> 1
        )
      ), 
      pos = Text.Combine(
        List.Transform(List.Select(b, each Text.Start(_, 1) = "+"), each Text.Remove(_, "+")), 
        ", "
      ), 
      neg = Text.Combine(
        List.Transform(List.Select(b, each Text.Start(_, 1) = "-"), each Text.Remove(_, "-")), 
        ", "
      )
    ][[pos], [neg]]
  ), 
  res = Table.ExpandRecordColumn(tab, "Personalizar", {"pos", "neg"})
in
  res

Solving the challenge of Extract Signed Numbers from Text with Excel

Excel solution 1 for Extract Signed Numbers from Text, proposed by Bo Rydobon 🇹🇭:
=LET(
    z,
    A3:A10&"-+",
    MAKEARRAY(
        ROWS(
            z
        ),
        2,
        LAMBDA(
            r,
            c,
            TEXTJOIN(
                ", ",
                ,
                UNIQUE(
                    TOCOL(
                        DROP(
                            TEXTSPLIT(
                                INDEX(
                                    z,
                                    r,
                                    1
                                ),
                                CHAR(
                                    41+2*c
                                ),
                                VSTACK(
                                    CHAR(
                                        47-2*c
                                    ),
                                    CHAR(
                                        SEQUENCE(
                                            26
                                        )+64
                                    )
                                ),
                                ,
                                ,
                                
                            ),
                            ,
                            1
                        )
                    )
                )
            )
        )
    )
)
Excel solution 2 for Extract Signed Numbers from Text, proposed by John V.:
=DROP(
    REDUCE(
        0,
        A3:A10,
        LAMBDA(
            a,
            v,
            LET(
                f,
                LAMBDA(
                    s,
                    LET(
                        n,
                        UNIQUE(
                            BYCOL(
                                DROP(
                                    IFERROR(
                                        --LEFT(
                                            TEXTSPLIT(
                                                v&s,
                                                s
                                            ),
                                            ROW(
                                                1:15
                                            )
                                        ),
                                        
                                    ),
                                    ,
                                    1
                                ),
                                MAX
                            ),
                            1
                        ),
                        TEXTJOIN(
                            ", ",
                            ,
                            IF(
                                n,
                                n,
                                ""
                            )
                        )
                    )
                ),
                VSTACK(
                    a,
                    HSTACK(
                        f(
                            "+"
                        ),
                        f(
                            "-"
                        )
                    )
                )
            )
        )
    ),
    1
)
Excel solution 3 for Extract Signed Numbers from Text, proposed by محمد حلمي:
=LET(
    r,
    LAMBDA(
        x,
        v,
        MAP(
            A3:A10,
            LAMBDA(
                a,
                
                ARRAYTOTEXT(
                    UNIQUE(
                        IFERROR(
                            TOCOL(
                                TEXTSPLIT(
                                    DROP(
                                        
                                        TEXTSPLIT(
                                            a,
                                            x,
                                            CHAR(
                                                SEQUENCE(
                                                    26
                                                )+64
                                            )
                                        ),
                                        ,
                                        1
                                    ),
                                    v
                                ),
                                2
                            ),
                            ""
                        )
                    )
                )
            )
        )
    ),
    
    HSTACK(
        r(
            "+",
            "-"
        ),
        r(
            "-",
            "+"
        )
    )
)
Excel solution 4 for Extract Signed Numbers from Text, proposed by Kris Jaganah:
=REDUCE(
    {"Positive Numbers",
    "Negative Numbers"},
    A3:A10,
    LAMBDA(
        x,
        y,
        VSTACK(
            x,
            LET(
                a,
                CHAR(
                    SEQUENCE(
                        26,
                        ,
                        65
                    )
                ),
                b,
                IFERROR(
                    DROP(
                        TEXTSPLIT(
                            y,
                            ,
                            "+"
                        ),
                        1
                    ),
                    ""
                ),
                c,
                TEXTJOIN(
                    ", ",
                    ,
                    UNIQUE(
                        TEXTBEFORE(
                            b,
                            VSTACK(
                                "-",
                                a
                            ),
                            ,
                            ,
                            ,
                            b
                        )
                    )
                ),
                d,
                IFERROR(
                    DROP(
                        TEXTSPLIT(
                            y,
                            ,
                            "-"
                        ),
                        1
                    ),
                    ""
                ),
                e,
                TEXTJOIN(
                    ", ",
                    ,
                    UNIQUE(
                        TEXTBEFORE(
                            d,
                            VSTACK(
                                "+",
                                a
                            ),
                            ,
                            ,
                            ,
                            d
                        )
                    )
                ),
                HSTACK(
                    c,
                    e
                )
            )
        )
    )
)
Excel solution 5 for Extract Signed Numbers from Text, proposed by Julian Poeltl:
=LET(STRY,
    A3:A10,
    HSTACK(BYROW(STRY,
    LAMBDA(string,
    TEXTJOIN(", ",
    TRUE,
    UNIQUE(IFERROR(BYCOL(TEXTSPLIT(
        "A"&string,
        "+"
    ),
    LAMBDA(array,
    DROP(TEXTSPLIT(
        TEXTSPLIT(
            TEXTSPLIT(
                array,
                CHAR(
                    SEQUENCE(
                        26
                    )+64
                )
            ),
            "+"
        ),
        "-"
    ),
    0,
    (COUNTA(
        TEXTSPLIT(
            TEXTSPLIT(
                TEXTSPLIT(
                array,
                CHAR(
                    SEQUENCE(
                        26
                    )+64
                )
            ),
                "+"
            ),
            "-"
        )
    )-1)*-1))),
    ""),
    TRUE)))),
    BYROW(STRY,
    LAMBDA(string,
    TEXTJOIN(", ",
    TRUE,
    UNIQUE(IFERROR(BYCOL(TEXTSPLIT(
        "A"&string,
        "-"
    ),
    LAMBDA(array,
    DROP(TEXTSPLIT(
        TEXTSPLIT(
            TEXTSPLIT(
                array,
                CHAR(
                    SEQUENCE(
                        26
                    )+64
                )
            ),
            "+"
        ),
        "-"
    ),
    0,
    (COUNTA(
        TEXTSPLIT(
            TEXTSPLIT(
                TEXTSPLIT(
                array,
                CHAR(
                    SEQUENCE(
                        26
                    )+64
                )
            ),
                "+"
            ),
            "-"
        )
    )-1)*-1))),
    ""),
    TRUE))))))
Excel solution 6 for Extract Signed Numbers from Text, proposed by Timothée BLIOT:
=REDUCE(
    {"Positive Numbers",
    "Negative Numbers"},
    A3:A10,
    LAMBDA(
        w,
        v,
         LET(
             F,
             LAMBDA(
                 x,
                 IFNA(
                     ARRAYTOTEXT(
                         UNIQUE(
                             TOCOL(
                                 REGEXEXTRACT(
                                     v,
                                     x,
                                     1
                                 )
                             )
                         )
                     ),
                     ""
                 )
             ),
             VSTACK(
                 w,
                 HSTACK(
                     F(
                         "(?<=+)d+"
                     ),
                     F(
                         "(?<=-)d+"
                     )
                 )
             )
         )
    )
)
Excel solution 7 for Extract Signed Numbers from Text, proposed by Hussein SATOUR:
=LET(
    F,
     LAMBDA(
         x,
         y,
          LET(
              a,
               TEXTAFTER(
                   x,
                    y,
                    SEQUENCE(
                        5
                    )
               ),
               b,
               IFERROR(
                   TEXTBEFORE(
                       a,
                        {"+",
                       "-"}
                   ),
                    a
               ),
               c,
               --VSTACK(
                   b,
                    TEXTBEFORE(
                        b,
                        CHAR(
                            SEQUENCE(
                                26
                            )+64
                        )
                    )
               ),
              
              ARRAYTOTEXT(
                  UNIQUE(
                      FILTER(
                          c,
                           NOT(
                               ISERROR(
                                   c
                               )
                           )
                      )
                  )
              )
          )
     ),
     TEXTSPLIT(
         CONCAT(
             MAP(
                 A3:A10,
                  LAMBDA(
                      z,
                       IFERROR(
                           F(
                               z,
                               "+"
                           )&"/"&F(
                               z,
                               "-"
                           ),
                            "*/*"
                       )&"|"
                  )
             )
         ),
          "/",
          "|",
         1
     )
)
Excel solution 8 for Extract Signed Numbers from Text, proposed by Duy Tùng:
=LET(
    f,
    LAMBDA(
        v,
        MAP(
            A3:A10,
            LAMBDA(
                x,
                ARRAYTOTEXT(
                    UNIQUE(
                        TOCOL(
                            MAP(
                                DROP(
                                    TEXTSPLIT(
                                        x,
                                        ,
                                        v
                                    ),
                                    1
                                ),
                                LAMBDA(
                                    x,
                                    LOOKUP(
                                        69^96,
                                        --LEFT(
                                            x,
                                            ROW(
                                                1:20
                                            )
                                        )
                                    )
                                )
                            ),
                            3
                        )
                    )
                )
            )
        )
    ),
    IFERROR(
        HSTACK(
            f(
                "+"
            ),
            f(
                "-"
            )
        ),
        ""
    )
)
Excel solution 9 for Extract Signed Numbers from Text, proposed by Sunny Baggu:
=LET(
 _e1,
     LAMBDA(
         x,
          y,
          z,
         
          IFERROR(
              
               ARRAYTOTEXT(
                   
                    UNIQUE(
                        
                         TOCOL(
                             
                              TEXTBEFORE(
                                  
                                   TEXTBEFORE(
                                       DROP(
                                           TEXTSPLIT(
                                               x,
                                                ,
                                                y
                                           ),
                                            1
                                       ),
                                        CHAR(
                                            SEQUENCE(
                                                26,
                                                 ,
                                                 CODE(
                                                     "A"
                                                 )
                                            )
                                        ),
                                        ,
                                   &     ,
                                        1,
                                        ""
                                   ),
                                  
                                   z,
                                  
                                   ,
                                  
                                   ,
                                  
                                   1
                                   
                              ),
                             
                              3
                              
                         )
                         
                    )
                    
               ),
              
               ""
               
          )
          
     ),
    
 REDUCE(
 {"Positive Numbers",
     "Negative Numbers"},
    
 A3:A10,
    
 LAMBDA(a,
     v,
     VSTACK(a,
     HSTACK(_e1(v,
     "+",
     "-"),
     _e1(v,
     "-",
     "+"))))
 )
)
Excel solution 10 for Extract Signed Numbers from Text, proposed by Sunny Baggu:
=LET(
 _e1,
     LAMBDA(
         x,
          y,
          z,
         
          IFERROR(
              
               ARRAYTOTEXT(
                   
                    UNIQUE(
                        
                         TOCOL(
                             
                              TEXTBEFORE(
                                  
                                   TEXTBEFORE(
                                       DROP(
                                           TEXTSPLIT(
                                               x,
                                                ,
                                                y
                                           ),
                                            1
                                       ),
                                        CHAR(
                                            SEQUENCE(
                                                26,
                                                 ,
                                                 CODE(
                                                     "A"
                                                 )
                                            )
                                        ),
                                        ,
                                        ,
                                        1,
                                        ""
                                   ),
                                  
                                   z,
                                  
                                   ,
                                  
                                   ,
                                  
                                   1
                                   
                              ),
                             
                              3
                              
                         )
                         
                    )
                    
               ),
              
               ""
               
          )
          
     ),
    
 HSTACK(MAP(A3:A10,
     LAMBDA(a,
     _e1(a,
     "+",
     "-"))),
     MAP(A3:A10,
     LAMBDA(a,
     _e1(a,
     "-",
     "+"))))
)
Excel solution 11 for Extract Signed Numbers from Text, proposed by LEONARD OCHEA 🇷🇴:
=LET(F,
    LAMBDA(x,
    y,
    LET(r,
    DROP(
        REDUCE(
            "",
            DROP(
                TEXTSPLIT(
                    x,
                    y
                ),
                ,
                1
            ),
            LAMBDA(
                a,
                b,
                HSTACK(
                    a,
                    --LEFT(
                        b,
                        SEQUENCE(
                            LEN(
                                b
                            )
                        )
                    )
                )
            )
        ),
        ,
        1
    ),
    TEXTJOIN(", ",
    ,
    IFERROR(UNIQUE(1/(1/BYCOL(
        IFERROR(
            r,
            
        ),
        MAX
    )),
    1),
    "")))),
    REDUCE(
        B2:C2,
        A3:A10,
        LAMBDA(
            i,
            j,
            VSTACK(
                i,
                HSTACK(
                    F(
                        j,
                        "+"
                    ),
                    F(
                        j,
                        "-"
                    )
                )
            )
        )
    ))
Excel solution 12 for Extract Signed Numbers from Text, proposed by Abdallah Ally:
CHAR(SEQUENCE(26)+64) 🙌👏
Excel solution 13 for Extract Signed Numbers from Text, proposed by Abdallah Ally:
=DROP(REDUCE("",
    A3:A10,
    LAMBDA(x,
    y,
    VSTACK(x,
    LET(a,
    y,
    b,
    MID(
        a,
         SEQUENCE(
             LEN(
                 a
             )
         ),
        1
    ),
    c,
    TRIM(
        TEXTSPLIT(
            CONCAT(
                MAP(
                    b,
                    LAMBDA(
                        x,
                        IFS(
                            OR(
                                UPPER(
                                    x
                                )=CHAR(
                                    SEQUENCE(
                                        26,
                                        ,
                                        65
                                    )
                                )
                            ),
                            " ",
                            ISNUMBER(
                                -x
                            ),
                            x,
                            1,
                            " "&x
                        )
                    )
                )
            ),
            " ",
            ,
            ,
            ,
            ""
        )
    ),
    f,
    LAMBDA(v,
    s,
    ARRAYTOTEXT(IFERROR(ABS(UNIQUE(FILTER(v,
    (LEFT(
        v
    )=s)*(LEN(
        v
    )>1),
    ""),
    1)),
    ""))),
    HSTACK(
        f(
            c,
            "+"
        ),
        f(
            c,
            "-"
        )
    ))))),
    1)
Excel solution 14 for Extract Signed Numbers from Text, proposed by Charles Roldan:
=REDUCE(
    B2:C2,
     A3:A10,
     
    LET(
        s,
         {"+",
        "-"},
         c,
         CHAR(
             SEQUENCE(
                 ,
                  26,
                  CODE(
                      "A"
                  )
             )
         ),
         LAMBDA(
             _,
             x,
              
             VSTACK(
                 _,
                  MAP(
                      s,
                       LAMBDA(
                           y,
                            IFERROR(
                                ARRAYTOTEXT(
                                    UNIQUE(
                                        TOCOL(
                                            --TEXTSPLIT(
                                                TEXTSPLIT(
                                                    "Thank you Excel BI" & x,
                                                     y
                                                ),
                                                 ,
                                                 HSTACK(
                                                     s,
                                                      c
                                                 )
                                            ),
                                             3
                                        )
                                    )
                                ),
                                 ""
                            )
                       )
                  )
             )
         )
    )
)
Excel solution 15 for Extract Signed Numbers from Text, proposed by Bilal Mahmoud kh.:
=IFERROR(
    TEXTSPLIT(
        TEXTJOIN(
            "|",
            ,
            MAP(
                A1:A8,
                LAMBDA(
                    x,
                    LET(
                        n,
                        TEXTSPLIT(
                            x,
                            {"+",
                            "-"}
                        ),
                        m,
                        TEXTJOIN(
                            " ",
                            ,
                            MAP(
                                n,
                                LAMBDA(
                                    x,
                                    LET(
                                        a,
                                        MID(
                                            x,
                                            SEQUENCE(
                                                LEN(
                                                    x
                                                )
                                            ),
                                            1
                                        ),
                                        b,
                                        CONCAT(
                                            IF(
                                                ISNUMBER(
                                                    a*1
                                                ),
                                                a,
                                                " "
                                            )
                                        ),
                                        b
                                    )
                                )
                            )
                        ),
                        o,
                        TEXTSPLIT(
                            m,
                            " ",
                            ,
                            TRUE
                        ),
                        p,
                        IFERROR(
                            FIND(
                                "+"&o,
                                x,
                                1
                            ),
                            ""
                        ),
                        q,
                        IFERROR(
                            FIND(
                                "-"&o,
                                x,
                                1
                            ),
                            ""
                        ),
                        pos,
                        TEXTJOIN(
                            ",",
                            TRUE,
                            UNIQUE(
                                TOCOL(
                                    IFERROR(
                                        MID(
                                            x,
                                            p+1,
                                            LEN(
                                                o
                                            )
                                        ),
                                        ""
                                    )
                                )
                            )
                        ),
                        neg,
                        TEXTJOIN(
                            ",",
                            TRUE,
                            UNIQUE(
                                TOCOL(
                                    IFERROR(
                                        MID(
                                            x,
                                            q+1,
                                            LEN(
                                                o
                                            )
                                        ),
                                        ""
                                    )
                                )
                            )
                        ),
                        pos&"/"&neg
                    )
                )
            )
        ),
        "/",
        "|",
        FALSE
    ),
    ""
)
Excel solution 16 for Extract Signed Numbers from Text, proposed by Pieter de Bruijn:
=LET(x,
    LAMBDA(y,
    BYROW(MAP(TEXTAFTER(
        A3:A10,
        y,
        SEQUENCE(
            ,
            5
        ),
        ,
        ,
        
    ),
    LAMBDA(m,
    LET(n,
    --MID(
        m,
        1,
        10-SEQUENCE(
            9
        )
    ),
    TAKE(TOCOL(n/(LEN(
        n
    )=10-SEQUENCE(
            9
        )),
    2),
    1)))),
    LAMBDA(
        r,
        IFERROR(
            ARRAYTOTEXT(
                UNIQUE(
                    TOCOL(
                        r,
                        2
                    )
                )
            ),
            ""
        )
    ))),
    HSTACK(
        x(
            "+"
        ),
        x(
            "-"
        )
    ))
Excel solution 17 for Extract Signed Numbers from Text, proposed by Ziad A.:
=ARRAYFORMULA(
    MAP(
        REGEXREPLACE(
            A3:A10,
            {"+",
            "-"}&"(d+)|.",
            "$1 "
        ),
        LAMBDA(
            n,
            JOIN(
                ", ",
                UNIQUE(
                    SPLIT(
                        n,
                        " "
                    ),
                    1
                )
            )
        )
    )
)
Excel solution 18 for Extract Signed Numbers from Text, proposed by Edwin Tisnado:
=DROP(
    REDUCE(
        "",
        A3:A10,
        LAMBDA(
            u,
            v,
            LET(
                f,
                LAMBDA(
                    x,
                    y,
                    TEXTJOIN(
                        ",",
                        1,
                        IFERROR(
                            UNIQUE(
                                TOCOL(
                                    DROP(
                                        TEXTSPLIT(
                                            TEXTSPLIT(
                                                v,
                                                x,
                                                y
                                            ),
                                            CHAR(
                                                SEQUENCE(
                                                    26
                                                )+64
                                            )
                                        ),
                                        ,
                                        1
                                    ),
                                    3
                                )
                            ),
                            ""
                        )
                    )
                ),
                VSTACK(
                    u,
                    HSTACK(
                        f(
                            "+",
                            "-"
                        ),
                        f(
                            "-",
                            "+"
                        )
                    )
                )
            )
        )
    ),
    1
)
Excel solution 19 for Extract Signed Numbers from Text, proposed by Anup Kumar:
=LET(
    
    tx,
    A3,
    
    rp,
    SUBSTITUTE(
        tx,
        "+",
        "^+"
    ),
    
    rm,
    SUBSTITUTE(
        rp,
        "-",
        "^-"
    ),
    
    ts,
    TOROW(
        TEXTSPLIT(
            rm,
            "^",
            UNICHAR(
                SEQUENCE(
                    ,
                    26,
                    65
                )
            ),
            TRUE,
            1,
            ""
        )
    ),
    
    nu,
    UNIQUE(
        FILTER(
            ts,
            ts<>""
        ),
        TRUE
    ),
    
    pl,
    TEXTJOIN(
        ", ",
        ,
        TEXTAFTER(
            FILTER(
                nu,
                LEFT(
                    nu,
                    1
                )="+"
            ),
            "+",
            ,
            ,
            ,
            ""
        )
    ),
    
    mn,
    TEXTJOIN(
        ", ",
        ,
        TEXTAFTER(
            FILTER(
                nu,
                LEFT(
                    nu,
                    1
                )="-"
            ),
            "-",
            ,
            ,
            ,
            ""
        )
    ),
    
    HSTACK(
        IFERROR(
            pl,
            ""
        ),
        IFERROR(
            mn,
            ""
        )
    )
    
)
Excel solution 20 for Extract Signed Numbers from Text, proposed by LUIS FLORENTINO COUTO CORTEGOSO:
=LET(
    f,
    LAMBDA(
        ce,
        op,
        LET(
            t,
            MID(
                ce,
                UNIQUE(
                    TOCOL(
                        SEARCH(
                            op,
                            ce,
                            SEQUENCE(
                                LEN(
                                    ce
              &                  )
                            )
                        ),
                        3
                    )
                ),
                100
            ),
            e,
            MAP(
                t,
                LAMBDA(
                    x,
                    LET(
                        n,
                        LEFT(
                            x,
                            SEQUENCE(
                                LEN(
                                    x
                                )
                            )
                        ),
                        MAX(
                            ABS(
                                FILTER(
                                    n,
                                    ISNUMBER(
                                        --n
                                    ),
                                    ""
                                )
                            )
                        )
                    )
                )
            ),
            IFERROR(
                ARRAYTOTEXT(
                    UNIQUE(
                        TOCOL(
                            e,
                            3
                        )
                    )
                ),
                ""
            )
        )
    ),
    REDUCE(
        B2:C2,
        A3:A10,
        LAMBDA(
            a,
            fi,
            VSTACK(
                a,
                HSTACK(
                    f(
                        fi,
                        "+"
                    ),
                    f(
                        fi,
                        "-"
                    )
                )
            )
        )
    )
)
Excel solution 21 for Extract Signed Numbers from Text, proposed by Andres Rojas Moncada:
=LET(
    fnr,
    LAMBDA(
        str,
        sen,
        pos,
        neg,
        fff,
        IF(
            str="",
            pos&"/"&neg,
            
            LET(
                c,
                LEFT(
                    str
                ),
                esn,
                ISNUMBER(
                    c*1
                ),
                nstr,
                RIGHT(
                    str,
                    LEN(
                    str
                )-1
                ),
                
                IF(
                    c="+",
                    fff(
                        nstr,
                        1,
                        pos&" ",
                        neg&" ",
                        fff
                    ),
                    IF(
                        c="-",
                        fff(
                            nstr,
                            2,
                            pos&" ",
                            neg&" ",
                            fff
                        ),
                        
                        IF(
                            AND(
                                sen=1,
                                esn
                            ),
                            fff(
                                nstr,
                                sen,
                                pos&c,
                                neg,
                                fff
                            ),
                            IF(
                                AND(
                                    sen=2,
                                    esn
                                ),
                                fff(
                                    nstr,
                                    sen,
                                    pos,
                                    neg&c,
                                    fff
                                ),
                                fff(
                                    nstr,
                                    0,
                                    pos&" ",
                                    neg&" ",
                                    fff
                                )
                            )
                        )
                    )
                )
            )
        )
    ),
    
    
    f,
    LAMBDA(
        cad,
        TEXTJOIN(
            ", ",
            1,
            UNIQUE(
                TEXTSPLIT(
                    cad,
                    ,
                    " "
                )
            )
        )
    ),
    
    
    DROP(
        REDUCE(
            "",
            A3:A10,
            LAMBDA(
                a,
                v,
                LET(
                    res,
                    fnr(
                        v,
                        0,
                        "",
                        "",
                        fnr
                    ),
                    VSTACK(
                        a,
                        HSTACK(
                            f(
                                TEXTBEFORE(
                                    res,
                                    "/"
                                )
                            ),
                            f(
                                TEXTAFTER(
                                    res,
                                    "/"
                                )
                            )
                        )
                    )
                )
            )
        ),
        1
    )
)

Solving the challenge of Extract Signed Numbers from Text with Python

Python solution 1 for Extract Signed Numbers from Text, proposed by Jan Willem Van Holst:
Long live Regex:
import pandas as pd 
import re
df = pd.read_csv(r"C:JWLENOVOPYTHONPQ challengesExcel_Challenge_383.csv", sep=',', skipfooter=2)
string_input = df['Strings'].to_list()
plus_list = []
neg_list = []
for row in string_input:
 plus = list(set([elem.replace('+', '') for elem in re.findall(r"+d+",row)]))
 plus_str = ', '.join(plus)
 plus_list.append(plus_str)
 neg = list(set([elem.replace('-', '') for elem in re.findall(r"-d+",row)]))
 neg_str = ', '.join(neg)
 neg_list.append(neg_str)
df['+']=plus_list
df['-']=neg_list
print(df)
                    
                  

Solving the challenge of Extract Signed Numbers from Text with Python in Excel

Python in Excel solution 1 for Extract Signed Numbers from Text, proposed by JvdV -:
import regex as re
[[', '.join(re.findall(fr'{x}(d++)(?

Solving the challenge of Extract Signed Numbers from Text with R

R solution 1 for Extract Signed Numbers from Text, proposed by Konrad Gryczan, PhD:
library(tidyverse)
library(readxl)
input = read_excel("Excel/383 Extract Positive and Negative Numbers.xlsx", range = "A2:A10")
test = read_excel("Excel/383 Extract Positive and Negative Numbers.xlsx", range = "B2:C10")
extract = function(input, sign) {
 numbers = input %>%
 str_extract_all(paste0(sign, "(\d+)")) %>%
 unlist() %>%
 as.numeric() %>%
 abs() %>%
 unique() %>%
 str_c(collapse = ", ") 
 
 if (numbers == "") {
 numbers = NA_character_
 } else {
 numbers = numbers
 }
}
result = input %>%
 mutate(positive = map_chr(Strings, extract, "\+"),
 negative = map_chr(Strings, extract, "\-")) 
                    
                  

&

Leave a Reply