Заменить одиночную обратную косую черту двойным обратным слэшем
Кажется, достаточно просто, не так ли? Ну, я не знаю.
Вот код, который я пытаюсь:
input = Regex.Replace(input, "\\", "\\\\\\");
Однако, я получаю сообщение об ошибке,
Нарушение ArgumentException было необработанным - разбор "\" - "Незаконный" в конце шаблона.
Как это сделать?
Ответы
Ответ 1
Первый должен быть "\\\\"
, а не "\\"
. Он работает следующим образом:
- Вы написали
"\\"
.
- Это означает последовательность
\
в строке.
- Затем двигатель regex считывает это, что переводит как обратную косую черту, которая не ускользает, поэтому она выдает ошибку.
С помощью регулярного выражения гораздо проще использовать строку "verbatim". В этом случае строка verbatim будет @"\\"
. При использовании стенографических строк вам нужно только рассмотреть возможность экранирования для механизма регулярных выражений, так как обратные косые черты обрабатываются буквально. Вторая строка также будет @"\\"
, так как она не будет интерпретироваться с помощью механизма регулярных выражений.
Ответ 2
Если вы хотите заменить одну обратную косую черту на два, может быть яснее исключить один уровень экранирования в регулярном выражении, используя @"..."
как формат для ваших строковых литералов, также известный как строка в виде строки. Тогда легче видеть, что
string output = Regex.Replace(input, @"\\", @"\\");
является заменой от \
до \\
.
Ответ 3
var result = Regex.Replace(@"afd\tas\asfd\", @"\\", @"\\");
Первым параметром является строка \\, которая является \in regex.
Второй параметр не обрабатывается регулярным выражением, поэтому он будет помещать его как есть, при замене.
Ответ 4
Если вы собираетесь использовать ввод в шаблоне регулярного выражения позже, может быть хорошей идеей использовать Regex.Encode.
input = Regex.Escape(input);
Ответ 5
Я знаю, что слишком поздно, чтобы помочь вам, может быть, кому-то это поможет. В любом случае это сработало для меня:
text = text.Replace(@"\",@"\\");
и я нахожу его еще более простым.
Ура!