Identificando substrings com base em regras complexas

Suponha que eu tenha seqüências de texto que se parecem com isso:

A-B-C-I1-I2-D-E-F-I1-I3-D-D-D-D-I1-I1-I2-I1-I1-I3-I3

Aqui eu quero identificar sequências de marcadores (A é um marcadorI3 é um marcador etc.) queleva a uma subsequência consistindo doIX marcadores (ou seja,I1, I2ouI3) que contém umI3. Essa subsequência pode ter um comprimento de 1 (ou seja, um únicoI3 marcador) ou pode ter duração ilimitada, mas sempre precisa conter pelo menos 1I3 marcador e pode conter apenasIX marcadores. Na subsequência que leva aoIX subsequência,I1 eI2 pode ser incluído, mas nuncaI3.

Na string acima, preciso identificar:

A-B-C-I1-I2-D-E-F

o que leva aoI1-I3 subsequência que contémI3

e

D-D-D-D

o que leva aoI1-I1-I2-I1-I1-I3-I3 subsequência que contém pelo menos 1I3.

Aqui estão alguns exemplos adicionais:

A-B-I3-C-I3

a partir desta cadeia, devemos identificarA-B porque é seguido por uma subsequência de 1 que contémI3, e tambémC, porque é seguido por uma subsequência de 1 que contémI3.

e:

I3-A-I3

aquiA deve ser identificado porque é seguido por uma subsequência de 1 que contémI3. O primeiroI3 próprio não será identificado, porque estamos interessados apenas nas subsequências que são seguidas por uma subsequência deIX marcadores que contémI3.

Como posso escrever uma função / regex genérica que realiza essa tarefa?

questionAnswers(3)

yourAnswerToTheQuestion