Привет Я написал очень простую программу на 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?
Из любопытства, почему вы используете стенографический «@» в очень многих местах? Вам это нужно только в том случае, если у вас есть строка, которую трудно прочитать с помощью escape-символов или в местах, где вы хотите полностью сохранить пробелы. – Tory
Ну, это было на всякий случай, когда мне пришлось использовать более сложные строки в будущем, но, с другой стороны, это могло бы смутить вас, вы правы. –
@ user2402806 readline рассматривает их как литералы. Заменяйте \\ n и \\ r с помощью \ n и \ r – Anirudha