Вам нужно будет лучше определить правила, которые определяют ваши потребности в сопоставлении. При создании любого типа кода поиска или поиска вам нужно четко понимать, какие входные данные вы ожидаете и какие выходные вы нужно производить. Очень легко создать ошибочный код, если вы не примете эти вопросы к сведению. Тем не менее ...
Вы должны иметь возможность использовать регулярные выражения. Вложенность может сделать его немного более сложным, но все же выполнимым (в зависимости от того, что вы ожидаете, чтобы соответствовать во вложенных сценариях). Нечто подобное должно начать вас:
var start = "[start]";
var end = "[end]";
var regEx = new Regex(String.Format("{0}(.*){1}", Regex.Escape(start), Regex.Escape(end)));
var source = "[start]aaaaaa[end] wwwww [start]cccccc[end]";
var matches = regEx.Match( source );
Это должно быть тривиально, чтобы обернуть код выше в функцию, соответствующую вашим потребностям.