2013-10-01 5 views
2

Привет Я написал очень простую программу на C#, чтобы использовать C# Regex из командной строки вместо того, чтобы полагаться на поиск и замену MS Word. Проблема в том, что даже если Regex распознает \ r и \ n в порядке, когда я пытаюсь заменить строку на любую из них, она, похоже, заменяет ее экранированным символом вместо самого символа.Regex.Replace rufuses для замены на newline

[STAThread] 
    static void Main(string[] args) 
    { 
     string initial = Clipboard.GetText(); 
     Console.Write("Find: "); 
     string find = Console.ReadLine(); 
     Console.Write("Replace: "); 
     string replace = Console.ReadLine(); 
     string final = Regex.Replace(initial, find, replace); 
     Clipboard.SetText(final); 
    } 

Например, моя строка ввода из буфера обмена будет «Вудкок, американский» (с возврата каретки-перевод строки в конце). шаблон будет @ ",. + \ r", который соответствует штрафу, а строка замены будет @ "\ r \ n". Это создает строку «Woodcock \ r \ n» (которые являются буквами r и n, чтобы быть четкими). Что я делаю не так?

Редактировать: Ответ Анируда частично решил мою проблему, и я обновил код соответствующим образом. Однако кажется, что когда я вводил «\ r \ n» в ReadLine, он также каким-то образом исчезает, тогда как если я пишу string replace = "\r\n", он фактически заменяет строку каретой return-newline. Ссылка на новый вопрос: C# ReadLine escapes carriage return/newline?

+0

Из любопытства, почему вы используете стенографический «@» в очень многих местах? Вам это нужно только в том случае, если у вас есть строка, которую трудно прочитать с помощью escape-символов или в местах, где вы хотите полностью сохранить пробелы. – Tory

+0

Ну, это было на всякий случай, когда мне пришлось использовать более сложные строки в будущем, но, с другой стороны, это могло бы смутить вас, вы правы. –

+0

@ user2402806 readline рассматривает их как литералы. Заменяйте \\ n и \\ r с помощью \ n и \ r – Anirudha

ответ

8

Это потому, что вы используете стенографическую строку i.e @"", которая избегает обращения к ним как к литералам, а не к специальным символам!

Строка замена должна быть "\r\n"НЕ@"\r\n"

Чтобы решить другую проблему

Output=Regex.Replace(input,"\\r?\\n","\r\n"); 
+0

Это похоже на это! спасибо –

+0

@ user2402806 не забудьте отметить это как ответ .. :) – Anirudha

+0

Извините, я не знал, как! –

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