cancel
Showing results for 
Search instead for 
Did you mean: 
Reply
mwild
Frequent Visitor

String Extract based on criteria

I have a table and one column contains free text.  I'm looking to add a column which will search the free text and extract anything which has a letter followed by 5 numbers.

 

For example - the below would be extracted:


D98765

d12345

D 54821

d 65411

This could be anywhere within the string of text.  Is this possible?

1 ACCEPTED SOLUTION

@mwild  ***Made a tweak to the code***

The following works. I will let you tweak the code further if you need to so I am not doing all your homework 😂

 

StringMatch = 
VAR NoBlankFreeText =
    SUBSTITUTE ( 'Sample Data'[FreeText], " ", "", 1 )
VAR UpperD =
    FIND ( "D", NoBlankFreeText, 1, BLANK () )
VAR LowerD =
    FIND ( "d", NoBlankFreeText, 1, BLANK () )
VAR PositionD =
    IF ( ISNUMBER ( UpperD ), UpperD, LowerD)
VAR CheckNumbers =
    ISERROR (
        ISNUMBER ( VALUE ( MID ( NoBlankFreeText, PositionD + 1, 5 ) ) )
    )
RETURN 
    IF (
        NOT ( CheckNumbers ),
        MID ( NoBlankFreeText, PositionD, 6),
        "No Match"
    )

 

 

moizsherwani_0-1632236672765.png

 

 

Thanks,

Moiz
Was I able to answer your question? Mark my post as a solution to help others. Kudos if you liked the solution.
Proud to be a Super User!

View solution in original post

7 REPLIES 7
mh2587
Super User
Super User

With combination of LEFT or RIGHT function



Muhammad Hasnain

#LetsConnect https://www.linkedin.com/in/hasnain2587/
mh2587
Super User
Super User

Or you can use CONTAINSSTRING function e.g 

MyCalculatedColumn = If(CONTAINSSTRING([TARGETCOLUMN];"searchforthis");TRUE();FALSE())

 



Muhammad Hasnain

#LetsConnect https://www.linkedin.com/in/hasnain2587/

I am not sure how this will work when the end goal is "any letter followed by any numbers" when the letter and the numbers could be anything, e.g. it can be "Z 98765" or "b34561" or worse "!@#@!D48202@#!@".

Thanks,

Moiz
Was I able to answer your question? Mark my post as a solution to help others. Kudos if you liked the solution.
Proud to be a Super User!

The letter will always be "D" or "d"
There may be a space (or may not be) and then 5 numbers between 0 and 9

@mwild  ***Made a tweak to the code***

The following works. I will let you tweak the code further if you need to so I am not doing all your homework 😂

 

StringMatch = 
VAR NoBlankFreeText =
    SUBSTITUTE ( 'Sample Data'[FreeText], " ", "", 1 )
VAR UpperD =
    FIND ( "D", NoBlankFreeText, 1, BLANK () )
VAR LowerD =
    FIND ( "d", NoBlankFreeText, 1, BLANK () )
VAR PositionD =
    IF ( ISNUMBER ( UpperD ), UpperD, LowerD)
VAR CheckNumbers =
    ISERROR (
        ISNUMBER ( VALUE ( MID ( NoBlankFreeText, PositionD + 1, 5 ) ) )
    )
RETURN 
    IF (
        NOT ( CheckNumbers ),
        MID ( NoBlankFreeText, PositionD, 6),
        "No Match"
    )

 

 

moizsherwani_0-1632236672765.png

 

 

Thanks,

Moiz
Was I able to answer your question? Mark my post as a solution to help others. Kudos if you liked the solution.
Proud to be a Super User!
mh2587
Super User
Super User

You can use CONTAIN function



Muhammad Hasnain

#LetsConnect https://www.linkedin.com/in/hasnain2587/
moizsherwani
Super User
Super User

You can do this using regular expression (using R or Python) in the query editor, Curbal here explains it really well

 

https://www.youtube.com/watch?v=9E3VsvFAge4

 

Regards,

 

Moiz

If this post helps, please "Accept" it as Solution to help other members find it.

Thanks,

Moiz
Was I able to answer your question? Mark my post as a solution to help others. Kudos if you liked the solution.
Proud to be a Super User!

Helpful resources

Announcements
PBI Sept Update Carousel

Power BI September 2023 Update

Take a look at the September 2023 Power BI update to learn more.

Learn Live

Learn Live: Event Series

Join Microsoft Reactor and learn from developers.

Top Solution Authors