【问题标题】:Regex.Replace rufuses to replace with newlineRegex.Replace 拒绝用换行符替换
【发布时间】:2013-10-02 03:51:54
【问题描述】:

您好,我编写了一个非常简单的 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?

【问题讨论】:

  • 出于好奇,你为什么在这么多地方使用逐字的“@”?仅当您有一个使用转义字符难以阅读的字符串或在您想要绝对保留空格的位置时才需要它。
  • 好吧,只是以防万一我以后不得不使用更复杂的字符串,但再想想这可能是核心混淆,你是对的。
  • @user2402806 readline 将它们视为文字..将 \\n 和 \\r 替换为 \n 和 \r
  • @user2402806 查看我的编辑

标签: c# regex


【解决方案1】:

这是因为您使用的是逐字字符串,即 @"" 会转义 \r\n 将它们视为文字而不是特殊字符!

替换字符串应该是"\r\n" NOT @"\r\n"

解决你的其他问题

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

【讨论】:

  • 对不起,我不知道怎么做!
  • 感谢您的回答!然而,这并不能解决我的问题,因为它只影响比赛,目前工作正常。所以我仍然不明白如何绕过 ReadLine 将它们视为垃圾。
  • @user2402806 read line 会将它们视为文字..使用上面的代码替换这些文字
  • 哦,我明白你的意思了。我添加了你的代码,但不幸的是它仍然没有解决问题。
猜你喜欢
  • 2013-02-05
  • 2011-05-20
  • 1970-01-01
  • 1970-01-01
  • 2021-05-28
  • 2011-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多