2009-08-10 3 views
109

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

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

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

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

EDIT: По сути, я хотел решить эту проблему без необходимости в регулярном выражении. Решение, которое я принимаю;

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

Я рад разрешить этот вопрос с разделением.

+0

Можете ли вы разместить свой код? –

+0

Покажите нам свой код, который не работает. –

+0

Кроме того, пожалуйста, напишите, что вы делаете, из-за этого, помимо того, что вы опубликовали, что вы хотите выбраться из него. –

ответ

202

Чтобы показать как string.Split и Regex использование:

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

Или если ваш минимальный код анальный, как я: 'var parts1 = input.Split (new [] {"] ["}, StringSplitOptions.None);' –

+1

В чем преимущество предоставления 'StringSplitOptions.None' над' input.Split (новая строка [] {"] ["}) '? – seebiscuit

+0

Это предполагает, что есть оба символа правильно? Что делать, если я хочу расколоться либо «[», либо «]»? Из моих тестов до сих пор я предполагаю, что это другая история, не так ли? – C4u

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

Обратите внимание, что этот подход предполагает, что он означает разделение на каждый] и [, даже если они не появляются в комбинации] [. –

+2

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

+0

Ваше] предположение [правильно. Он не уточнил, поэтому я дал ему что-то, что сработает для его примера. Если он не хочет пропустить их, то будет работать. Но без дополнительной информации мы никогда не узнаем – SwDevMan81

2
Regex.Split("abc][rfd][5][,][.", @"\]\]"); 
+7

Вы, вероятно, хотите '\ [' где-то там ... –

11

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

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

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

Это то, что я делаю. Это дает мне нормализованный общий метод, который работает на всех платформах, не беспокоясь о трюках, специфичных для платформы. –

+3

Не очень хорошая идея. Рассмотрим: 'string input =" abc] [rf-d] [5 "'. «-» в «rf-d» будет обнаружен как разделитель. Вместо этого см. Принятый ответ. –

+0

В этом случае замените и разделите на маловероятный символ, например ~ или 'или даже символ без клавиатуры, такой как ¿или ◙ и т. Д. – seabass2020