Если вы хотите группу захвата со всеми оставшимися совпадениями, вы должны сначала потреблять первые:
(TAG.*?){3}(TAG.*?)*
Это соответствует первым 3 вхождениям в первой группе захвата и соответствует остальным в 2nd.
Если вы не хотите, чтобы первые совпадения были в группе захвата, вы можете пометить ее как группу без захвата:
(?:TAG.*?){3}(TAG.*?)*
В зависимости от вашего примера, я думаю, что регулярное выражение внутри группа захвата еще не верна. Если это не дает вам правильной идеи о том, как это сделать, пожалуйста, дайте нам пример матчей, которые вы хотите увидеть. Тогда я отредактирую свой ответ.
РЕДАКТИРОВАТЬ:
У меня такое ощущение, что вы хотите захватить 3-й и последующие вхождения в собственных группах захвата, при этом игнорируя первые 3 вхождения.
Я не могу правильно объяснить, почему, но я думаю, что это невозможно по следующим причинам:
- Игнорирование первых 3 вхождений в собственной (не) группе захвата вынуждает вас отказаться от модификатора 'g', чтобы найти все вхождения (потому что это просто "проигнорирует 3 TAGS, найдите 1" в al oop).
- Невозможно захватить несколько групп только с одна группа захвата. Попытка сделать это всегда фиксирует последний случай. Существует возможность для захвата не только последнего, но и всех вхождений вместе в одной группе захвата, но кажется, что вы хотите, чтобы они были в отдельных группах.
Итак, как решить this?
Я бы придумал правильное регулярное выражение для одного тега и повторил это, используя модификатор find all
или g
. В python вы можете просто взять все результаты, пропуская первые 3:
import re
str = "ATAG:AAAABTAG:BBBBCTAG:CCCCCTAG:DDDDEEEECTAG.FFFFCTAG GGGGCTAGHHHH"
pattern = r"(?:TAG((?:(?!TAG).)+))"
findings = re.findall(pattern, str)[:3]
Если вы хотите игнорировать первый символ после TAG
, просто добавьте .
после TAG
:
pattern = r"(?:TAG.((?:(?!TAG).)+))"
Объяснение регулярного выражения:
- я использую ?:
, чтобы сделать некоторые группы захвата группы не захвата . Я хочу иметь дело только с одной группой захвата.
- Чтобы избавиться от не жадного модификатора и быть немного более точным, c в том, что мы на самом деле хотим, я ввел отрицательный взгляд вперед после TAG
случая.