Regex: вопрос о? = И любых символах - PullRequest
0 голосов
/ 21 сентября 2019

У меня есть целевая строка, например:

   "addr: line1 
         line2

      tel:12345678"

примечание: между строкой 2 и телом может быть 1 или несколько новых строк: \ r \ n или \ r \ n \ r \n или больше. Результат, который я хочу получить, следующий:

   "addr: line1 
         line2"

нет \ r \ n в строке 2.

Мои вопросы:

1) Если я использую

/ addr [\ s \ S] + (? = (\ R \ n) + тел) /

, я получу адрес без тел, но я не могу избавиться от "\ r \ n" в "line2", как я могу это сделать?

2) Я знаю [\ s \S] представляет любые символы, включая \ r, \ n, и (. | \ N | \ r) тоже могут это делать.Но почему [. \ N] не может?Это как синтаксис [\ s \ S], не так ли?

Большое спасибо!

1 Ответ

1 голос
/ 21 сентября 2019

Вы должны сделать первый "+" не жадным, чтобы он не совпадал со всем пробелом перед "tel"

  var regex = new Regex(@"addr.+?(?=\s+tel)", RegexOptions.Singleline);
  var result = regex.Match(text).Value;
...