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 commentaires

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?
Kais
Kais le 11 Mai 2021
I can live with the range of numbers in the example. Three values!

Connectez-vous pour commenter.

 Réponse acceptée

Stephen23
Stephen23 le 11 Mai 2021
Modifié(e) : Stephen23 le 11 Mai 2021
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'}

Plus de réponses (1)

Jonas
Jonas le 11 Mai 2021

0 votes

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

1 commentaire

Kais
Kais le 11 Mai 2021
Thanks! it does not unfortunately. It will return overlapping sequences and it does not return indices.

Connectez-vous pour commenter.

Catégories

Produits

Version

R2021a

Community Treasure Hunt

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

Start Hunting!

Translated by