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

151

У меня проблемы с разделением строки в C # с разделителем "] [".

Например, строка «abc] [rfd] [5] [,] [.»

Должен дать массив, содержащий;
аЬс
RFD
5
,
.

Но я не могу заставить его работать, даже если я попробую RegEx, я не смогу разделить разделитель.

РЕДАКТИРОВАТЬ: По сути, я хотел решить эту проблему без необходимости регулярного выражения. Решение, которое я принимаю, таково;

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

Я рад, что смог решить этот разделенный вопрос.


источник
Покажите нам свой код, который не работает.
Конрад Рудольф
Кроме того, пожалуйста, опубликуйте, что вы действительно получаете от этого, в дополнение к тому, что вы опубликовали, что вы хотите получить от этого.
Лассе В. Карлсен
2
Возможный дубликат разделения строки на другую строку в C #
puzzlepiece87,

Ответы:

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())это будет разделено на [и] отдельно. Например: Привет [Мир] Это [Я! будет: Привет, Мир, Это, Я!
Ма Чувак
36
string tests = "abc][rfd][5][,][.";
string[] reslts = tests.Split(new char[] { ']', '[' }, StringSplitOptions.RemoveEmptyEntries);
SwDevMan81
источник
8
Обратите внимание, что этот подход предполагает, что он подразумевает разделение на все] и [, даже если они не отображаются в] [комбинации.
Лассе В. Карлсен
2
Эта перегрузка строки. Split рассматривает ее как 2 отдельных разделителя - просто вы отбрасываете все остальное. Существует перегрузка, которая принимает строку в качестве разделителя (на самом деле, массив строк) - поэтому вам не нужно удалять пустые значения (это означает также: вы можете найти пустые значения, когда они действительно существуют в данных)
Марк Гравелл
Ваше предположение [правильно. Он не уточнил, поэтому я дал ему кое-что, что подойдет для его примера. Если он не хочет их пропускать, то сработает. Но без дополнительной информации мы никогда не узнаем
SwDevMan81
Это то, что я искал. В вопросе это была простая проблема, но это расширенный ответ.
Bitterblue
Это было именно то, что я искал. Но правильный ответ - это тоже новость для меня, я не знал, что вы могли бы разделиться с более чем одним персонажем, как описал Марк. Синтаксис довольно мусор.
Петр Кула
13

Другой вариант:

Замените разделитель строк одним символом, а затем разделите его на этот символ.

string input = "abc][rfd][5][,][.";
string[] parts1 = input.Replace("][","-").Split('-');
seabass2020
источник
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
2
Regex.Split("abc][rfd][5][,][.", @"\]\]");
Кристофер Клевес
источник