2016-04-06 14 views
3

Ich habe eine Zeichenfolge. Der Einfachheit halber könnte es so aussehen:Mehrere Zeichenfolgen ersetzen (innerhalb der gleichen Zeichenfolge)

\r\n\r\n\r\n 

Es könnte auch mehr Vorkommen haben ‚\ r \ n‘ - ich bin nur hier, um das einfachste Problem veröffentlichen.

Ich brauche oben für das Beispiel einen Raum zwischen jedem Auftreten '\ r \ n \ r \ n' einzufügen, erwarte ich mit einer Schnur, am Ende, das wie folgt aussieht:

\r\n \r\n \r\n 

I CAN Dazu den folgenden Code verwenden (was ich mag es nicht, weil es eine Menge von Strings schafft, um das erwartete Ergebnis zu produzieren):

string newString = "\r\n\r\n\r\n"; 
while (newString.Contains("\r\n\r\n")) 
     newString = newString.Replace("\r\n\r\n", "\r\n \r\n"); 

ich habe versucht, Probleme String.Replace zu verwenden oder herauszufinden ein regelmäßiger Ausdruck, der das für mich tun kann.

Wenn ich versuche, string.replace (oder sogar ein StringBuilder.Replace) zu verwenden, wie so ...

var result = "\r\n\r\n\r\n".Replace("\r\n\r\n", "\r\n \r\n"); 

ich am Ende mit

"\r\n \r\n\r\n" //There is no space between the last two carriage return/line feed 

denke ich, dass ein regulärer Ausdruck könnte ersetzen Mach den Trick, aber ich kann nicht herausfinden, wie man die Regex-Engine dazu bringt, eine träge Übereinstimmung zu machen, um alle Vorkommen von \ r \ n nach der ersten Ersetzung zu ersetzen.

Ich habe sowohl SO und Google versucht, ein ähnliches Problem zu finden, aber nichts von Nutzen gefunden. Ich entschuldige mich im Voraus, wenn dies ein Duplikat ist, aber wenn es ist, kann ich es nicht finden!

Also zusammenfassend kann ich dies mit der While-Schleife tun, aber ich wollte wissen, ob es eine elegantere Lösung gab?

EDIT

Sorry - ein bisschen mehr ist dies: Mein Code kann auch eine Zeichenfolge überprüfen, die wie folgt aussieht:

5\r\n\r\nTest\r\n 

In diesem Fall würde ich erwarten, um zu sehen, eine Zeichenfolge, die wie folgt aussieht: so

5\r\n \r\nTest\r\n 

- ich will nicht nur ersetzen '\ r \ n' mit '\ r \ n' wie dieser wou gib mir ld eine Zeichenfolge, die lke aussieht:

"5\r\n \r\n Test\t\n " 
+0

Können Sie versuchen newString = newString.Replace ("\ r \ n", "\ r \ n") .Trim(); ? –

+0

Entschuldigung - fügte weitere Details hinzu, als mir klar wurde, dass ich einen wichtigen Teil meiner Frage weggelassen hatte. – Jay

Antwort

4

Sie voraus einen Blick können und hinter aussehen, so dass Sie nur die „zwischen“ Teil übereinstimmen.

string test = "\r\n\r\n\r\n"; 
Regex reg = new Regex("(?<=\r\n)(?=\r\n)"); 
test = reg.Replace(test, " "); 

die in test wobei "\ r \ n \ r \ n \ r \ n" ergibt.

+0

Ich habe gerade dieses Baby in meinen Unit Test gesteckt und es hat das erste Mal bestanden ... danke! – Jay

-1
"\r\n\r\n\r\n".Replace("\n\r", "\n \r"); 
+0

Entschuldigung - bitte beachten Sie meine Bearbeitung auf der qquestion - das ist nicht, was ich versuche zu tun – Jay

+0

Dies ist zu vereinfachen. Bei einer Zeichenfolge wie "\ n \ r" sollte basierend auf den Anforderungen des OP kein Leerzeichen eingefügt werden. – juharr

+0

Juharr, "\ n \ r" darf als Variable verwenden. Dies ist nur ein Beispiel. –

Verwandte Themen