Regex, чтобы соответствовать параграфам - PullRequest
0 голосов
/ 27 февраля 2019

У меня есть такой текст:

Terms: 1 I've got the {name} and {term}
    So I would like to go
    But not return

Terms: 2 I've got the {name} and {term}
    So I would like to go
    But not return

Terms: 3 I've got the {name} and {term}
    So I would like to go
    But not return

Я бы хотел сопоставить каждый абзац, который начинается с Terms: и заканчивается 2 or more newlines.

.ближайший, который я могу получить, кажется :

/(terms:).*(\n)*/gim

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

Ответы [ 2 ]

0 голосов
/ 27 февраля 2019

Может быть, вы можете попробовать что-то вроде ..

(terms:.*\n.*\n.*(\n|))

https://regex101.com/r/5Dzp1F/1/

0 голосов
/ 27 февраля 2019

Вы можете использовать

(?sim)^terms:.*?(?=(?:\r?\n){2,}|\z)

См. Демоверсию .NET regex

Подробнее

  • (?sim) - включить RegexOptions.Singleline, RegexOptions.IgnoreCase и Regex.Multiline опции
  • ^ - начало строки
  • terms: - литеральная подстрока
  • .*? - любые 0+ символов, как можно меньше
  • (?=(?:\r?\n){2,}|\z) - местоположение, за которым следуют 2 или более последовательностей разрыва строки (CRLF или LF) или конец строки.

ИСПОЛЬЗОВАНИЕ

var results = Regex.Matches(s, @"(?sim)^terms:.*?(?=(?:\r?\n){2,}|\z)")
    .Cast<Match>()
    .Select(x => x.Value)
    .ToList();

Или разделить на 2 или более разрывов строк с помощью

(?:\r?\n){2,}

См. это демонстрационное приложение .NET regex .Он просто соответствует 2 или более повторениям необязательных символов CR и LF.

USAGE

var results = Regex.Split(s, @"(?:\r?\n){2,}");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...