Я не уверен, действительно ли вам нужны разделительные метки в вашем массиве. Эта часть кажется излишней, если у вас нет конкретной спецификации для нее. Это решение предполагает, что вам это действительно не нужно. Поскольку вы не указали язык, как насчет Perl?
use Data::Dumper;
my $text = 'textA textB _MARK1_ textC _MARK2_ textD _MARK1_ textE textF _MARK2_ textG textH textI';
my @results = $text =~ m/(?<=_MARK1_|_MARK2_)(.*?)(?=_MARK1_|_MARK2_|$)/g;
print Data::Dumper::Dumper @results;
Однако нет смысла пробовать общий случай с регулярными выражениями. Вместо этого используйте парсер.