regexp: only strings without given end string

5 views (last 30 days)
Jette on 29 Jan 2018
Answered: Jyotish Robin on 8 Feb 2018
I try to use regexp to extract strings with certain conditions within a cell array.
My conditions are:
  1. String starts with one of severeal given strings (e.g. 'abc', 'def' )
  2. There can be several substrings starting with '_' following the substring defined in 1
  3. The string must not end with '_std'
header = {'abc', 'abc_b1', 'abc_b1_std', 'abc_b1_b2', 'abc_b1_b2_std', 'def_b1', 'def_b1_std', 'bcd'};
I'd like to extract:
'abc', 'abc_b1', 'abc_b1_b2', 'def_b1'
I tried the following
res = regexp( header, ['^(abc|def)(_.*)*'] );
but I don't know how to exclude the '_std' at the end.
Any ideas?
( I use MATLAB R2015b)

Answers (1)

Jyotish Robin
Jyotish Robin on 8 Feb 2018
Hi Jette!
Your approach seems right to me in taking into consideration the first two of your requirements. Now, to extend it to exclude the '_std' at the end, you can make use of Lookaround Assertions.
To be specific,
>>res= regexp( header, ['^(abc|def)(_.*)*(?<!std)$'], 'match' )
seems like the required command you need to use.
Hope this helps!



Community Treasure Hunt

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

Start Hunting!