string.split - кратним роздільником символів


151

у мене виникають проблеми з розділенням рядка в c # з роздільником "] [".

Наприклад рядок "abc] [rfd] [5] [,] [."

Повинен отримати масив, що містить;
аЬс
RFD
5
,
.

Але я не можу зробити так, щоб він працював, навіть якщо я спробую RegEx, я не можу отримати розділення на роздільнику.

EDIT: По суті, я хотів вирішити цю проблему без необхідності регулярного виразу. Я приймаю рішення;

string Delimiter = "][";  
var Result[] = StringToSplit.Split(new[] { Delimiter }, StringSplitOptions.None);

Я радий, що зможу вирішити це розділене питання.

c#  split 

Покажіть нам свій код, який не вдається.
Конрад Рудольф

Крім того, будь ласка, опублікуйте, що ви робите з цього, крім того, що ви опублікували, що ви хочете отримати з нього.
Лассе В. Карлсен

Відповіді:


268

Щоб показати string.Splitі Regexвикористання, і використання:

string input = "abc][rfd][5][,][.";
string[] parts1 = input.Split(new string[] { "][" }, StringSplitOptions.None);
string[] parts2 = Regex.Split(input, @"\]\[");

5
Або якщо ваш мінімальний код анальний, як я: 'var parts1 = input.Split (new [] {"] ["}, StringSplitOptions.None);'
Пол Гримшо

2
Яка вигода від надання StringSplitOptions.Noneпонад input.Split(new string[] { "][" })?
seebiscuit

1
Це передбачає, що обидва символи є так? Що робити, якщо я хочу розділити або "[", або "]"? З моїх тестів поки що я здогадуюсь, що це інша історія, правда?
C4d

Дякую, це працює !!
Кумар

3
@ C4u String.Split("[]".ToCharArray())це розділиться як [, так і окремо]. Наприклад: Привіт [Світ] Її [Мені! було б: Привіт, світ, його, я!
Ma Dude

36
string tests = "abc][rfd][5][,][.";
string[] reslts = tests.Split(new char[] { ']', '[' }, StringSplitOptions.RemoveEmptyEntries);

8
Зауважте, що цей підхід передбачає, що він має на увазі поділ на кожне] та [, навіть коли вони не відображаються у комбінації] [
Лассе В. Карлсен

2
Ця перевантаження string.Split трактує це як два окремі роздільники - просто ви відкидаєте решту. Існує перевантаження, яка приймає рядок як роздільник (власне, масив рядків) - тому вам не доведеться видаляти порожні значення (мається на увазі: ви можете знайти порожні значення, коли вони дійсно існують у даних)
Марк Гравелл

Ваше] припущення є [правильним. Він не уточнював, тож я дав йому щось, що буде працювати для його прикладу. Якщо він не хоче пропустити їх, то працював би. Але без додаткової інформації ми ніколи не дізнаємось
SwDevMan81

Ось що я шукав. У питанні це була проста проблема, але це розширена відповідь.
Bitterblue

Саме це я і шукав. Але правильна відповідь - це також для мене новина, я не знав, що ти можеш розлучитися з більш ніж одним персонажем, як описав Марк. Синтаксис - досить сміття.
Пьотр Кула

13

Ще один варіант:

Замініть розділовий рядок на один символ, а потім розділіть його на цей символ.

string input = "abc][rfd][5][,][.";
string[] parts1 = input.Replace("][","-").Split('-');

1
Це я і роблю. Це дає мені нормалізований загальний метод, який працює на всіх платформах, не турбуючись про хитрощі, пов'язані з платформою.
Девід Бетц

5
Не гарна ідея. Розглянемо: string input = "abc][rf-d][5". Значення "-" в "rf-d" буде сприйматися як роздільник. Натомість див. Прийняту відповідь.
Гілад Барнер

У такому випадку замініть і розділіть на неправдоподібний символ, такий як ~ або `, або навіть символ, який не використовується на клавіатурі, наприклад ¿або ◙ тощо.
seabass2020,

1
Мені подобається рішення, якщо його чітке, надійне і може нормалізуватися. Моє використанняDim Levels As New List(Of String)(newSelectedTask.Replace(LevelDelimter, Chr(13)).Split(Chr(13)))
Nasenbaer

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.