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 consistindosó doIX
marcadores (ou seja,I1
, I2
ouI3
) 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?