您好我写了一个非常简单的C#程序,从命令行使用C#Regex而不是依赖于MS Word搜索和替换。问题是即使正则表达式识别\ r和\ n很好,当我尝试用其中任何一个替换字符串时,它似乎用转义字符而不是字符本身替换它。
[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);
}
例如,我从剪贴板输入的字符串将是“Woodcock,american”(最后带有回车换行符)。模式将是@“,。+ \ r”,匹配正常,替换字符串将是@“\ r \ n”。这会产生字符串“Woodcock \ r \ n”(字母r和n只是为了清楚)。我做错了什么?
编辑:Anirudh的回答部分解决了我的问题,并相应地更新了代码。但是,当我向ReadLine输入“\ r \ n”时,它似乎也以某种方式转义,而如果我写string replace = "\r\n"
它实际上用一个回车换行替换该字符串。链接到新问题:C# ReadLine escapes carriage return/newline?
答案 0 :(得分:8)
这是因为你使用的是逐字字符串,即@""
,它会逃脱\ r \ n将它们视为文字,而不是特殊字符!
替换字符串应为"\r\n"
不 @"\r\n"
解决您的其他问题
Output=Regex.Replace(input,"\\r?\\n","\r\n");