【问题标题】:C# ReadLine escapes carriage return/newline?C# ReadLine 转义回车/换行符?
【发布时间】:2013-10-01 19:45:36
【问题描述】:

您好,我编写了一个非常简单的 C# 程序,从命令行使用 C# Regex,而不是依赖于 MS Word 搜索和替换。问题是,当我在 Regex.Replace through Console.ReadLine() 中使用 "\r\n" 作为替换字符串时,它会替换为第 4 个字符 "\r\n" 而不是真正的回车换行。但是,如果我写 string replace= "\r\n" 它会按预期工作,即用回车换行符替换字符串。示例输入字符串为“Woodcock, American”(后跟 \r\n)。由于代码是它产生“Woodstock\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);
        System.Threading.Thread.Sleep(3000);
        Clipboard.SetText(final);
    }

【问题讨论】:

  • 您是否尝试过使用 Environment.NewLine 而不是 \r\n 。
  • @Bearcat9425 这应该没什么区别
  • \ 不是控制台中的转义字符。如果您希望 "\\r" 成为 "\r",则需要进行替换。使用 \ 转义在类 C 语言中是正常的,但在 VB 中则不然。控制台实现某些特定于语言的转义样式会很奇怪。
  • @Bearcat925 我不确定你的意思。问题是 ReadLine 似乎将我的输入视为垃圾,我不知道如何解决这个问题。我不确定 Environment.NewLine 会出现在哪里。

标签: c# regex readline


【解决方案1】:

如果您取消转义replace(可能还有find),它应该可以满足您的需要。

string initial = "Woodstock, American" + Environment.NewLine;
Console.Write("Find: ");
string find = Console.ReadLine();
Console.Write("Replace: ");
string replace = Console.ReadLine();
replace = Regex.Unescape(replace);
string final = Regex.Replace(initial, find, replace);

Console.WriteLine("initial:{0}(BEGIN){0}{1}{0}(END){0}", Environment.NewLine, initial);
Console.WriteLine("final:{0}(BEGIN){0}{1}{0}(END){0}", Environment.NewLine, final);
Console.ReadLine();

控制台 I/O:

找到:伍德斯托克 替换: 伍德斯托克\r\n 最初的: (开始) 美国伍德斯托克 (结尾) 最后: (开始) 伍德斯托克 , 美国人 (结尾)

MSDN Regex.Unescape

【讨论】:

  • 如果没有良好的“给定 X,期待 Y”场景,很难完全理解您所追求的。当然,这个答案是对您实际意思的猜测。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-05
  • 1970-01-01
  • 2016-10-23
  • 2021-07-05
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
相关资源
最近更新 更多