2016-12-02 8 views
8

В C#, как я могу задать регулярное выражение для замены нескольких групп. Например, я хотел бы заменить более одного экземпляра либо \r\n, либо \r\r со средой новой строки. Я логически написал это регулярное выражение, но я знаю, что это неправильно. Пожалуйста, исправьте и объясните, как это работает.Regex заменить несколько новых строк

System.Text.RegularExpressions.Regex.Replace(task.Message, @"(\r\n){2,}(\r\r){2,}", System.Environment.NewLine); 

ввода текста

Stackoverflow 

StackExchange 

User Experience 

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

Stackoverflow  
StackExchange  
User Experience 

ответ

10

Дело в том, что ваш регулярное выражение соответствует последовательности из \r\n (2 или более), а затем 2 или более последовательностей из \r\r. Вам нужно

[\r\n]+ 

Или [\r\n]{2,}, если вам нужно только соответствовать 2 или более вхождений \r или \n.

Если вы должны точно соответствовать 2 или более общих типов линии разрыва (\r\n в ОС Windows, \n в Unix/Linux и \r на Mac OS), используйте

(?:\r?\n|\r){2,} 
+1

произведения безотказно. Guess regex всегда должен быть в моем учебном списке – Deeptechtons

Смежные вопросы