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


151

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

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

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

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

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

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())это будет разделено на [и] отдельно. Например: Привет [Мир] Это [Я! будет: Привет, Мир, Это, Я!
Ма Чувак

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

8
Обратите внимание, что этот подход предполагает, что он подразумевает разделение на все] и [, даже если они не отображаются в] [комбинации.
Лассе В. Карлсен

2
Эта перегрузка строки. Split рассматривает ее как 2 отдельных разделителя - просто вы отбрасываете все остальное. Существует перегрузка, которая принимает строку в качестве разделителя (на самом деле, массив строк) - поэтому вам не нужно удалять пустые значения (это означает также: вы можете найти пустые значения, когда они действительно существуют в данных)
Марк Гравелл

Ваше предположение [правильно. Он не уточнил, поэтому я дал ему кое-что, что подойдет для его примера. Если он не хочет их пропускать, то сработает. Но без дополнительной информации мы никогда не узнаем
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.