Здравствуйте. У меня есть длинная строка, в которой есть переходы на новую строку, вопросительные, восклицательные знаки, точки. Мне нужно получить массив строк, которые будут делиться по правилу,
String[] lines = myText.Split(new char[] { '\r', '\n', '.', '!', '?' }, StringSplitOptions.RemoveEmptyEntries);
Такое решение делит всё верно, но проблема в том, что оно удаляет знаки препинания. Я хотел бы оставлять '.', '!', '?' вот эти знаки и удалять переходы на новую строку \r, \n. Пример:
Lorem ipsum, dolor sit amet, elit. Nullam! Faucibus congue?
Phasellus molestie, orci
Ut aliquam nulla tristique nec?
Nec bibendum tortor sodales!
Результат
1-Lorem ipsum, dolor sit amet, elit.
2-Nullam!
3-Faucibus congue?
4-Phasellus molestie, orci
5-Ut aliquam nulla tristique nec?
6-Nec bibendum tortor sodales!
Всем большое спасибо! Не ожидал, что столько откликнется помочь. Все ответы рабочие:)
Сначала подготавливаем текст, добавляя в знаки !?. \n.
var prepair = myText.Replace(".",".\n").Replace("!","!\n").Replace("?","?\n");
String[] lines = prepair.Split(new char[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries);
Давайте разделим текст с помощью регулярки:
string text = "Lorem ipsum, dolor sit amet, elit. Nullam! Faucibus congue?\r\nPhasellus molestie, orci\r\nUt aliquam nulla tristique nec?\r\nNec bibendum tortor sodales!";
string pattern = @"((?<=[.?!])|\r?\n) *";
foreach (string s in Regex.Split(text, pattern).Where(s => !string.IsNullOrWhiteSpace(s)))
Console.WriteLine(s);
Правда, придется удалить пустые строки вручную (я делаю это с помощью Where), так как в Regex.Split() нету аналога StringSplitOptions.RemoveEmptyEntries
Здесь паттерн описывает формат разделителя:
(?<=[.?!]) - положительный просмотр назад, т.е. ищем один из символов . или ? или !, но они сами в разделитель не входят, они войдут в часть перед разделителем
\r?\n - перевод строки, поддерживает варианты как \r\n, так и просто \n
| - "или", т.е. разделитель удовлетворяет или одному шаблону, или другому
* - и любое число пробелов, они будут принадлежать разделителю и в результат не попадут
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости