web-dev-qa-db-fra.com

Remplacer la barre oblique simple par une double barre oblique inverse

Cela semble assez simple, non? Eh bien, je ne sais pas.

Voici le code que j'essaye:

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

Cependant, je reçois une erreur,

ArgumentException n'a pas été géré - analyse "\" - Illégal\à la fin du modèle.

Comment puis-je faire cela?

19
Johnny

Le premier devrait être "\\\\", pas "\\". Cela fonctionne comme ceci:

  • Vous avez écrit "\\".
  • Cela se traduit par la séquence \ dans une chaîne.
  • Le moteur regex lit alors ceci, ce qui se traduit par une barre oblique inversée qui n'échappe à rien, il génère donc une erreur.

Avec regex, il est beaucoup plus facile d'utiliser une "chaîne textuelle". Dans ce cas, la chaîne textuelle serait @"\\". Lorsque vous utilisez des chaînes textuelles, il vous suffit de considérer l'échappement pour le moteur regex, car les barres obliques inverses sont traitées de manière littérale. La deuxième chaîne sera également @"\\", car elle ne sera pas interprétée par le moteur de regex.

24
porges

Si vous souhaitez remplacer une barre oblique inversée par deux, il peut s'avérer plus simple d'éliminer un niveau d'échappement dans l'expression régulière en utilisant @"..." comme format pour vos littéraux de chaîne, également appelé chaîne in extenso. Il est alors plus facile de voir que

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

est un remplacement de \ à \\.

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

Le premier paramètre est la chaîne \\ qui est\in regex.
Le deuxième paramètre n'est pas traité par regex, il sera donc mis tel quel lors du remplacement.

3
Alex Aza

Si vous souhaitez utiliser l’entrée dans un motif regex ultérieurement, il peut être judicieux d’utiliser Regex.Encode.

input = Regex.Escape(input);
2
Allrameest

Je sais qu'il est trop tard pour vous aider, peut-être que quelqu'un d'autre en profitera. Quoi qu'il en soit, cela a fonctionné pour moi:

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

et je le trouve encore plus simple.

À votre santé!

0
igop