.NET Regex запрос, чтобы найти только одну новую строку - PullRequest
3 голосов
/ 05 марта 2010

У меня есть огромная строка, которая выглядит так:

"Текст
Текст
Текст
Текст

Текст
Текст
Текст
Текст

Текст
Текст
Текст
Текст

"

Обратите внимание, что между каждым текстовым блоком находится новая строка. Также обратите внимание, что самый последний текстовый блок имеет две новые строки после него. Поэтому, когда я делаю

string[] strArray = Regex.Split(content, "\r\n");

Это работает хорошо, так как ищет шаблон возврата каретки, за которым следует новая строка. ОДНАКО, для самой последней записи в массиве, он создает только «» (пустую строку), потому что он разбивает самую последнюю дополнительную новую строку.

Так что мне нужно регулярное выражение вместо "\ r \ n", которое разделится на \ r и ровно на ОДНУ \ n.

есть идеи?

Ответы [ 3 ]

5 голосов
/ 05 марта 2010

Почему бы не сделать что-то подобное?

var strArray = content.Split(new[] { "\r\n" },
    StringSplitOptions.RemoveEmptyEntries);
1 голос
/ 05 марта 2010

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

"\r\n(?!\n)"

Это тебе помогает? Я думаю, что в вашем примере выше, последний текст будет включать в себя завершающий "\ r \ n \ n" затем ...

0 голосов
/ 05 марта 2010

Конец вашей строки примера будет

"Текст \ r \ nText \ r \ nText \ r \ n \ r \ n",

не

"Текст \ г \ NTEXT \ г \ NTEXT \ г \ п \ п"

как вам кажется, то есть каждая строка заканчивается на \ r \ n, даже если строка пуста. (Путаница может возникнуть из-за того, что \ r называется «возвращением кариеса», а \ n называется «новой строкой»).

Если вы хотите разбить строку и не обращать внимания на пустые строки, вы можете попробовать

string[] strArray = Regex.Split(content, "(\r\n)*");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...