Заменить одиночную обратную косую черту на двойную - PullRequest
19 голосов
/ 24 мая 2011

Это кажется достаточно простым, верно?Ну, я не знаю.

Вот код, который я пытаюсь:

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

Однако я получаю сообщение об ошибке,

ArgumentExceptionбыл обработан - синтаксический анализ "\" - Illegal \ в конце шаблона.

Как мне это сделать?

Ответы [ 5 ]

24 голосов
/ 24 мая 2011

Первый должен быть "\\\\", а не "\\". Это работает так:

  • Вы написали "\\".
  • Это переводит в последовательность \ в строке.
  • Движок регулярных выражений затем читает это, что переводится как обратный слеш, который ничего не экранирует, поэтому выдает ошибку.

С регулярным выражением гораздо проще использовать "дословную строку". В этом случае дословная строка будет @"\\". При использовании дословных строк вам нужно учитывать только экранирование для механизма регулярных выражений, поскольку обратные слеши рассматриваются буквально. Вторая строка также будет @"\\", так как она не будет интерпретироваться механизмом регулярных выражений.

7 голосов
/ 24 мая 2011

Если вы хотите заменить одну обратную косую черту на две, может быть яснее исключить один уровень экранирования в регулярном выражении, используя @"..." в качестве формата для строковых литералов, также называемых дословной строкой. Тогда легче увидеть, что

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

является заменой от \ до \\.

3 голосов
/ 24 мая 2011
 var result = Regex.Replace(@"afd\tas\asfd\", @"\\", @"\\");

Первый параметр - это строка \\, которая \ в регулярном выражении.
Второй параметр не обрабатывается регулярным выражением, поэтому при замене он будет помещен как есть.

2 голосов
/ 24 мая 2011

Если вы собираетесь использовать входные данные в шаблоне регулярных выражений позже, может быть хорошей идеей является использование Regex.Encode.

input = Regex.Escape(input);
0 голосов
/ 10 августа 2016

Я знаю, что уже слишком поздно, чтобы помочь вам, может быть, кто-то еще выиграет от этого.В любом случае это сработало для меня:

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

, и я нахожу это еще проще.

Ура!

...