Определение подстрок на основе сложных правил

Предположим, у меня есть текстовые строки, которые выглядят примерно так:

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

Здесь я хочу идентифицировать последовательности маркеров (A это маркер,I3 это маркер и т. д.)приводит к в подпоследовательность, состоящуютолько изIX маркеры (т.е.I1, I2, или жеI3) который содержитI3, Эта подпоследовательность может иметь длину 1 (то есть быть однойI3 маркер) или он может быть неограниченной длины, но всегда должен содержать не менее 1I3 маркер, и может содержать толькоIX маркеры. В подпоследовательности, которая приводит кIX подпоследовательности,I1 а такжеI2 можно включить, но никогдаI3.

В приведенной выше строке мне нужно указать:

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

что приводит кI1-I3 подпоследовательность, которая содержитI3

а также

D-D-D-D

что приводит кI1-I1-I2-I1-I1-I3-I3 подпоследовательность, которая содержит хотя бы 1I3.

Вот несколько дополнительных примеров:

A-B-I3-C-I3

из этой строки мы должны идентифицироватьA-B потому что за ним следует подпоследовательность 1, которая содержитI3, а такжеCпотому что за ним следует подпоследовательность 1, которая содержитI3.

а также:

I3-A-I3

ВотA должен быть идентифицирован, потому что за ним следует подпоследовательность 1, которая содержитI3, ПервыйI3 само по себе не будет идентифицировано, потому что нас интересуют только подпоследовательности, за которыми следует подпоследовательностьIX маркеры, которые содержатI3.

Как я могу написать универсальную функцию / регулярное выражение, которая выполняет эту задачу?

Ответы на вопрос(3)

Ваш ответ на вопрос