Разделить строку на новые строки (несколько строк) с разным интервалом - PullRequest
0 голосов
/ 14 июля 2020

У меня есть следующая строка, которая считывается из внешней системы.

var test = @"Order No.: 999\r\n\r\nCustomer ID:\r\n\r\nName:\r\n\r\Comment:\r\nPosition\r\n\r\nCount 20.80"

Я хочу разделить на новые строки

var result = test.Split(new string[] { @"\r\n\r\n" }, StringSplitOptions.None);

Есть две проблемы, которые делает вышеуказанный код не работает, возвращается только одно значение, вторая проблема заключается в том, что есть различия в новых строках, есть ли способ разделить это, используя другой метод?

\r\n\r\n
\r\n\r\
\r\n

Ответы [ 2 ]

1 голос
/ 14 июля 2020

Попробуйте это

private static readonly Regex _getLinesRegex = new Regex("\r\n|\r|\n", RegexOptions.Compiled);

Метод сплиттера

        /// <summary>
        /// Splits a string into lines
        /// </summary>
        /// <param name="value">The string to be slitted</param>
        /// <returns>The lines of the string</returns>
        public static string[] GetLines(this string value) => _getLinesRegex.Split(value);
0 голосов
/ 14 июля 2020

Моя первая попытка заключалась в том, чтобы ответить

Разделить на \r\n и использовать RemoveEmptyEntries как вариант.

Но потом я понял, что вы используете дословные строки (@"..."), так что у вас есть \r\n буквально.

Мое предложение состоит в том, чтобы разделить более или менее регулярные буквальные разрывы строк и обработать все специальные вещи специально:

var test = @"Order No.: 999\r\n\r\nCustomer ID:\r\n\r\nName:\r\n\r\Comment:\r\nPosition\r\n\r\nCount 20.80";
var result = test.Split(new string[] { @"\r\n" }, StringSplitOptions.RemoveEmptyEntries);
foreach (var s in result)
{
    var fixawkward = s;
    if (fixawkward.StartsWith(@"\r\"))
    {
        fixawkward = fixawkward.Substring(3);
    }
    Console.WriteLine(fixawkward);
}

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

...