2016-12-02 15 views
8

W języku C# jak określić wyrażenie regex, aby zastąpić wiele grup. Na przykład chciałbym zastąpić więcej niż jedną instancję albo \r\n lub \r\r z znakiem nowej linii środowiska. Logicznie napisałem to wyrażenie, ale wiem, że to jest złe. Popraw i wyjaśnij, jak to działa.Regex zamień wiele nowych linii

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

tekstu wejściowego

Stackoverflow 

StackExchange 

User Experience 

gdzie każda linia może być oddzielona poprzez \r\n lub \r\r. Oczekiwany wynik po regex zastąpić jest poniżej

Stackoverflow  
StackExchange  
User Experience 

Odpowiedz

10

Chodzi o to, że regex mecze sekwencje z \r\n (2 lub więcej), a następnie 2 lub więcej sekwencje z \r\r. Musisz

[\r\n]+ 

Or [\r\n]{2,} jeśli trzeba tylko dopasować 2 lub więcej wystąpień \r lub \n.

Jeśli trzeba dokładnie dopasować 2 lub więcej typowych linii Break (\r\n w systemie Windows, \n w Unix/Linux i \r na Mac OS), użyj

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

dzieła bez zarzutu. Odgadnij regex powinien zawsze znajdować się na mojej liście do nauki – Deeptechtons