it-swarm.com.de

Einzelne Backslash durch doppelte Backslash ersetzen

Es scheint einfach genug zu sein, richtig? Ich weiß es nicht.

Hier ist der Code, den ich versuche:

input = Regex.Replace(input, "\\", "\\\\\\");

Ich erhalte jedoch eine Fehlermeldung.

ArgumentException wurde nicht behandelt - Analyse "\" - Illegal\am Ende des Musters.

Wie mache ich das?

19
Johnny

Die erste sollte "\\\\" sein, nicht "\\". Es funktioniert so:

  • Sie haben "\\" geschrieben.
  • Dies übersetzt die Sequenz \ in einer Zeichenfolge.
  • Die Regex-Engine liest dann dies, was als Backslash übersetzt wird, der nichts entgeht, also einen Fehler auslöst.

Mit Regex ist es viel einfacher, einen "wörtlichen String" zu verwenden. In diesem Fall wäre die verbatim-Zeichenfolge @"\\". Wenn Sie wörtliche Zeichenfolgen verwenden, müssen Sie nur das Escape für die Regex-Engine berücksichtigen, da Backslashes wörtlich behandelt werden. Die zweite Zeichenfolge lautet ebenfalls @"\\", da sie von der Regex-Engine nicht interpretiert wird.

24
porges

Wenn Sie einen Backslash durch zwei ersetzen möchten, ist es möglicherweise klarer, eine Escape-Ebene im regulären Ausdruck zu entfernen, indem Sie @"..." als Format für Ihre Zeichenfolgenliterale verwenden, auch bekannt als verbatim-Zeichenfolge. Das ist dann leichter zu sehen

string output = Regex.Replace(input, @"\\", @"\\");

ist ein Ersatz von \ zu \\.

7
Tom
 var result = Regex.Replace(@"afd\tas\asfd\", @"\\", @"\\");

Der erste Parameter ist die Zeichenfolge \\, die in regex\steht.
Der zweite Parameter wird nicht von regex verarbeitet, er wird also beim Ersetzen unverändert übernommen.

3
Alex Aza

Wenn Sie die Eingabe später in einem Regex-Muster verwenden möchten, empfiehlt es sich, Regex.Encode zu verwenden.

input = Regex.Escape(input);
2
Allrameest

Ich weiß, es ist zu spät, um Ihnen zu helfen, vielleicht wird jemand anderes davon profitieren. Wie auch immer, das hat für mich funktioniert:

text = text.Replace(@"\",@"\\");

und ich finde es noch einfacher.

Prost!

0
igop