Регулярное выражение для разбиения строки (которая содержит символы новой строки) на куски равной длины - PullRequest
0 голосов
/ 15 октября 2019

У меня есть строка, скажем, Test Subject \ r \ nTest Комментарии ... Я хочу написать регулярное выражение, которое бы разбивало строку на куски из n символов, скажем, n = 6, и на процесс разбиения не должно влиятьсимволы новой строки (\ r \ n).

Код, который я придумал:

string pattern = ".{1," + 6 + "}";
string noteDetails = "Test Subject\r\nTest Comments...";
List<string> noteComments = Regex.Matches(noteDetails, pattern).Cast<Match>().Select(x => x.Value).ToList();`

Но вывод, который я получаю,

Test S
ubject

Test C
omment
s...

Желаемый вывод:

Test S
ubject
\r\nTe
st Com
ments.
..

Если \ r \ n отсутствует, то код работает нормально. Нижняя строка \ r \ n также должна рассматриваться как нормальные символы.

Заранее спасибо

Ответы [ 2 ]

1 голос
/ 15 октября 2019

Второй более традиционный подход, потому что Regex редко является лучшим выбором:

    var stringToSplit = @"Test Subject\r\nTest Comments...";

    var length = stringToSplit.Length;
    var lineLength = 6;

    var lastIndex = 0;
    for(int i = 0; i < length - lineLength ; i+= lineLength)
    {
        lastIndex = i;
        Console.WriteLine(stringToSplit.Substring(i, lineLength));
    }
    if (lastIndex < length)
    {           
        Console.WriteLine(stringToSplit.Substring(lastIndex + lineLength, (length - (lastIndex + lineLength))));
    }

И вывод:

Test S
ubject
\r\nTe
st Com
ments.
..
1 голос
/ 15 октября 2019

Вам не нужно регулярное выражение. Используйте строковые методы:

            string input = "Test Subject\nTest Comment";

            string[] results = input.ToCharArray()
                .Where(x => x != '\n')
                .Select((x, i) => new { chr = x, index = i })
                .GroupBy(x => x.index / 6)
                .Select(x => string.Join("", x.Select(y => y.chr)))
                .ToArray();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...