Разделение строки на C #

Я пытаюсь разбить строку на C # следующим образом:

Входящая строка находится в форме

string str = "[message details in here][another message here]/n/n[anothermessage here]" 

И я пытаюсь разбить его на массив строк в форме

 string[0] = "[message details in here]" string[1] = "[another message here]" string[2] = "[anothermessage here]" 

Я пытался сделать это таким образом, как это

 string[] split = Regex.Split(str, @"\[[^[]+\]"); 

Но это не работает правильно, я просто получаю пустой массив или строки

Любая помощь будет оценена!

Regex.Matches этого Regex.Matches метод Regex.Matches :

 string[] result = Regex.Matches(str, @"\[.*?\]").Cast().Select(m => m.Value).ToArray(); 

Метод Split возвращает подстроки между экземплярами указанного шаблона. Например:

 var items = Regex.Split("this is a test", @"\s"); 

Результаты в массиве [ "this", "is", "a", "test" ] .

Решение состоит в том, чтобы вместо этого использовать Matches .

 var matches = Regex.Matches(str, @"\[[^[]+\]"); 

Затем вы можете использовать Linq для получения массива совпадающих значений:

 var split = matches.Cast() .Select(m => m.Value) .ToArray(); 

Другим вариантом было бы использовать утверждения поиска для вашего разделения.

например

 string[] split = Regex.Split(str, @"(?<=\])(?=\[)"); 

Этот подход эффективно расщепляется на пустоте между закрывающей и открытой квадратной скобками.

Вместо использования регулярного выражения вы можете использовать метод Split в строке, например

 Split(new[] { '\n', '[', ']' }, StringSplitOptions.RemoveEmptyEntries) 

Вы потеряете [ и ] вокруг своих результатов с помощью этого метода, но нетрудно добавить их обратно по мере необходимости.