C # Простое разбиение строки по нескольким символам - PullRequest
1 голос
/ 09 мая 2011

Это довольно простая проблема. Если у меня есть строка и мне нужно .Split на что-то, состоящее из нескольких символов, что является «правильным» или самым простым способом сделать это. Я могу думать о том, как это сделать с регулярными выражениями, но есть более простой способ. Я делал это так и чувствую, что это настоящий взлом:

text = text .Replace("\r\n\r\n", "~"); 
text = text .Replace("\n\n", "~"); 

string[] splitText = text.Split('~');

Не должно иметь значения, что содержит оригинальная строка, но это будет что-то вроде:

SOMETEXT \ г \ nsomemoretext \ г \ п \ г \ nsometext2 \ г \ п \ г \ nfinalbitoftext

Разделение должно возвращать {somtext \ r \ nsomemoretext, sometext2, finalbitoftext

ПРИМЕЧАНИЕ: Большие блоки текста могут содержать \ r \ n, но никогда не содержать их вместе.

Ответы [ 3 ]

2 голосов
/ 09 мая 2011

Это должно сделать это:

char[] delim = {'\r','\n'};
var splitString = str.Split(delim, StringSplitOptions.RemoveEmptyEntries);

Редактировать:

Попробуйте вместо этого использовать разделитель string[], чтобы обеспечить совпадение двух символов \r\n.Попробуйте код ниже:

string[] delims = { "\r\n\r\n" };
var splitString = str.Split(delims, StringSplitOptions.RemoveEmptyEntries);
1 голос
/ 09 мая 2011

Используйте регулярное выражение для Разделить it:

Regex regex = new Regex("~+");
string[] hands = regex.Split(handsText);

Хорошо использовать статическую форму, если она вам нужна время от времени. Хорошо использовать форму экземпляра (см. Выше), если вы будете использовать ее часто, например, в цикле.

Точно так же вы могли бы использовать регулярное выражение для более простой замены \ n \ n и \ r \ n \ r \ n.

// note: using static version; above note applies here as well
String replaced = Regex.Replace(value, "(\r\n\r\n|\n\n)+", "~");
0 голосов
/ 10 мая 2011

Я бы использовал:

var splitted = Regex.Split(input, "(\r\n){2,}|\n{2,}|\r{2,}", RegexOptions.ExplicitCapture);

Это разбито на любые два (или более) разрывов строк в строке.

(Обратите внимание, что использование (\r\n)|\n|\r){2,} не работает, потому чтотогда "\ r \ n" считается как два переноса строки.)

Пример:

  • введите sometext \ r \ nsomemoretext \ r \ n \ r \ nsometext2 \ r \ n \r \ nfinalbitoftext
  • вывод: {sometext \ r \ nsomemoretext, sometext2, finalbitoftext}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...