Определение подстрок на основе сложных правил
Предположим, у меня есть текстовые строки, которые выглядят примерно так:
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
.
Как я могу написать универсальную функцию / регулярное выражение, которая выполняет эту задачу?