С String.Split ():
string input = "[abc].[some other string].[can.also.contain.periods].[our match]";
char[] seps = {'[',']','\\'};
string[] splitted = input.Split(seps,StringSplitOptions.RemoveEmptyEntries);
вы получаете "out match" в splitted [7], а can.also.contain.periods остается одной строкой (splitted [4])
Редактировать: массив будет иметь строку внутри [], а затем. и так далее, поэтому, если у вас есть переменное число групп, вы можете использовать это, чтобы получить желаемое значение (или удалить строки, которые просто '.')
Отредактировано для добавления обратной косой черты в разделитель для обработки таких случаев, как '\ [abc \]'
Edit2: для вложенных []:
string input = @"[abc].[some other string].[can.also.contain.periods].[our [the] match]";
string[] seps2 = { "].["};
string[] splitted = input.Split(seps2, StringSplitOptions.RemoveEmptyEntries);
Вы наш [the] совпадение] в последнем элементе (индекс 3), и вам придется удалить лишний]