Finding strings in a cell array that start with a specific substring

Hello, I'm looking for a specific implementation using the available functions in MATLAB 2015b.
If I have the following cell array
A = {'test' 'hello' 'world' 'st1' 'st2' 'st99'}
I would like to return a cell array B containing all elements that are of the form 'stXXX', where XXX is any number.
In the above example, I would like B to return as:
B = {'st1' 'st2' 'st99'}
In previous implementations, I have been able to get away with the following line:
B = A(not(cellfun('isempty',strfind(A,'st'))
but unfortunately in example A, the element 'test' is also triggering because it contains the 'st' substring. I'm just looking for code that doesn't have to be implented via a for loop. Thanks in advance.

 Accepted Answer

Try this
A = {'test' 'hello' 'world' 'st1' 'st2' 'st99'}
matches = regexp(A,'^st\d+$','match')
B = [matches{:}]

2 Comments

This works beautifully. I guess I had gotten myself trapped into thinking I needed cellfun. Thank you!
And extending this to a one-liner:
B = A(not(cellfun('isempty',regexp(A,'^st\d+$','match'))))

Sign in to comment.

More Answers (0)

Categories

Asked:

on 28 Oct 2020

Commented:

on 28 Oct 2020

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!