Identificar subcadenas basadas en reglas complejas

Supongamos que tengo cadenas de texto que se parecen a esto:

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

Aquí quiero identificar secuencias de marcadores (A es un marcadorI3 es un marcador, etc.) queconduce hasta a una subsecuencia que consistesolamente deIX marcadores (es decirI1, I2oI3) que contiene unI3. Esta subsecuencia puede tener una longitud de 1 (es decir, ser una solaI3 marcador) o puede tener una longitud ilimitada, pero siempre debe contener al menos 1I3 marcador, y solo puede contenerIX marcadores En la subsecuencia que conduce a laIX subsecuenciaI1 yI2 se puede incluir, pero nuncaI3.

En la cadena de arriba necesito identificar:

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

que conduce a laI1-I3 subsecuencia que contieneI3

y

D-D-D-D

que conduce a laI1-I1-I2-I1-I1-I3-I3 subsecuencia que contiene al menos 1I3.

Aquí hay algunos ejemplos adicionales:

A-B-I3-C-I3

de esta cadena debemos identificarA-B porque es seguido por una subsecuencia de 1 que contieneI3, y tambiénC, porque es seguido por una subsecuencia de 1 que contieneI3.

y:

I3-A-I3

aquíA debe identificarse porque es seguido por una subsecuencia de 1 que contieneI3. El primeroI3 en sí mismo no será identificado, porque solo estamos interesados en subsecuencias que son seguidas por una subsecuencia deIX marcadores que contienenI3.

¿Cómo puedo escribir una función genérica / expresión regular que realice esta tarea?

Respuestas a la pregunta(3)

Su respuesta a la pregunta