2008-12-04 4 views
2

Как лучше всего преобразовать экземпляры двойных обратных косых черт в один обратный слэш в строке, но удалить все случаи одиночной обратной косой черты?Удаление одиночных обратных косых черт, преобразование удвоений в одиночные строки

Так что:

 
\|Testing|ABC:1234\\1000-1\| 

Если преобразовать это:

 
|Testing|ABC:1234\1000-1| 

В идеале я хочу, чтобы избежать временной замены из '\' на другой символ. Предпочтительным является решение с использованием .NET или регулярных выражений.

+0

Ах, спасибо Блэр, да неправильно напечатайте в теге. – GONeale 2008-12-04 01:36:00

ответ

5
Regex.Replace(input, @"\\(.|$)", "$1"); 

[Изменить: Образец не соответствует всем возможным случаям, указанным в OP. Спасибо за предложения, GONeale и Алан М.]

+0

Короткие и сладкие, мне это нравится. – Charlie 2008-12-04 01:59:33

0

Спасибо за ваш ответ принцессы,

Однако в некоторых других случаях она терпит неудачу. Я использую этот вход:

Regex.Replace(@"\L\\A\", @"\\(.)", "$1") 

Это возвращающегося: L\A\ Когда он должен вернуть L\A. Я понимаю, что вы ищете любого другого персонажа с помощью «.», Но не знаете, как его исправить, поскольку иногда других символов не будет.

мне удалось собрать рабочий (еще немного скучный) подход в C#:

for (int i = 0; i < text.Length; i++) 
{ 
    if (text[i] == '\\' && (i + 1 <= text.Length && text[i + 1] == '\\')) 
     newText += '\\'; 
    else if (text[i] == '\\') 
     newText += string.Empty; 
    else 
     newText += text[i]; 
} 

Но предпочел бы что-то более элегантное.

+0

Все, что вам нужно сделать, это добавить проверку на «конец ввода» в группе захвата: Regex.Replace (@ "\ L \\ A \", @ "\\\ (. | $)", "$ 1") – 2008-12-04 02:15:38

Смежные вопросы