find all sequences between delimiters in an array

Given a sequence of numbers and a start and an end delimiters, how to find the index (start and end) of all possible sequence of numbers between delimiters (sequences can be of any length). Example:
v = [1 1 0 2 0 2 1 2 1 1 1 0 2 1 2 0 0 1 1 1 1 1 1 2 1 0 ]
A list of non-overalpping sequences and their start and end index that begin with 2 and end with 0 would be:
[2 0]
[2 1 2 1 1 1 0]
[2 1 2 0]
[2 1 0]
I feel like this could be solved using regular expression.

2 Comments

If the numbers are always positive integers <10 then this is easy. If the values can be >=10 or if you want to consider non-integer values then the task requires a bit more thought. What restrictions/limits do you have on the number values?
I can live with the range of numbers in the example. Three values!

Sign in to comment.

 Accepted Answer

v = [1,1,0,2,0,2,1,2,1,1,1,0,2,1,2,0,0,1,1,1,1,1,1,2,1,0];
[begIdx,endIdx,~,match] = regexp(sprintf('%d',v),'2.*?0')
begIdx = 1×4
4 6 13 24
endIdx = 1×4
5 12 16 26
match = 1×4 cell array
{'20'} {'2121110'} {'2120'} {'210'}

More Answers (1)

you could convert the array to a string or char array and then use extractBetween() which does what you want

1 Comment

Thanks! it does not unfortunately. It will return overlapping sequences and it does not return indices.

Sign in to comment.

Categories

Products

Release

R2021a

Asked:

on 11 May 2021

Edited:

on 11 May 2021

Community Treasure Hunt

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

Start Hunting!