替换字符串C#中的换行符

Yon*_*ahW 484 .net c# string

如何在C#中替换字符串中的换行符?

Cor*_*kie 696

使用替换 Environment.NewLine

myString = myString.Replace(System.Environment.NewLine, "replacement text")
Run Code Online (Sandbox Code Playgroud)

正如其他帖子中提到的,如果字符串来自另一个环境(OS),那么您需要替换新线控制字符的特定环境实现.

  • 总的来说,我喜欢这个解决方案.但请注意,即使在相同的操作系统上,实际换行也可能不匹配.这件事发生在我处理返回SQL的原因上.新行是\n,而Environment.NewLine是\ r \n.结果是没有任何东西匹配,所以新线仍然存在. (13认同)
  • 没有删除所有换行符.试试这个字符串**"\n\r \n我的消息\ r \n \n\r \n是这个.\n \n\r \n"** (12认同)
  • 首先,它对我不起作用.经过一些研究,我找到了解决方案:我不得不使用'使用系统;' 或'System.Environment.NewLine' (8认同)

Mar*_*ers 420

到目前为止发布的解决方案要么只替换,Environment.NewLine要么如果替换字符串包含换行符,则会失败,因为它们string.Replace多次调用.

这是一个解决方案,它使用正则表达式在字符串的一次传递中进行所有三次替换.这意味着替换字符串可以安全地包含换行符.

string result = Regex.Replace(input, @"\r\n?|\n", replacementString);
Run Code Online (Sandbox Code Playgroud)

  • @flamebaud不,如果一行中有多个换行符,则会产生不同的结果."\ r \n?| \n"将替换每个换行符,而"[\ r \n] +"将替换任意数量的换行符. (7认同)
  • 如果要删除可能来自不同操作系统的字符串中的换行符,这实际上是正确的解决方案.好的例子是JSON格式化.+1 (4认同)
  • 所以你说Regex.Replace(输入,@"[\ r \n] +",replacementString)不能完成同样的任务吗? (3认同)

Zom*_*eep 172

要扩展The.Anyi.9的答案,您还应该了解一般使用不同类型的换行符.根据您的文件来源,您可能需要考虑确保捕获所有替代品......

string replaceWith = "";
string removedBreaks = Line.Replace("\r\n", replaceWith).Replace("\n", replaceWith).Replace("\r", replaceWith);
Run Code Online (Sandbox Code Playgroud)

应该让你去...

  • 首先,我更喜欢环境,但如果字符串不是来自它运行的系统,它就不会工作.+1 (6认同)
  • 不,因为如果你有`\ r \n`,你最终会得到两次替换字符串 - 不理想. (5认同)
  • 您不需要字符串文字吗?字符串removeBreaks = Line.Replace(@"\r\n", ReplaceWith).Replace(@"\n", ReplaceWith).Replace(@"\r", ReplaceWith); (2认同)
  • @ShawnDotey不需要,我们要替换控制字符,而不是反斜杠和字母序列。 (2认同)

Bri*_*ndy 35

当我想为字符串插入换行符时,我会使用Environment.Newline,但是不要从字符串中删除所有换行符.

根据您的平台,您可以使用不同类型的换行符,但即使在同一平台内,也经常使用不同类型的换行符.特别是在处理文件格式和协议时.

string ReplaceNewlines(string blockOfText, string replaceWith)
{
    return blockOfText.Replace("\r\n", replaceWith).Replace("\n", replaceWith).Replace("\r", replaceWith);
}
Run Code Online (Sandbox Code Playgroud)


Bor*_*ach 33

使用 .NET 6 中的 new 方法

myString = myString.ReplaceLineEndings();
Run Code Online (Sandbox Code Playgroud)

替换当前字符串中的所有换行序列。

文档: ReplaceLineEndings

  • 这应该是现在接受的答案。 (5认同)

dri*_*iis 18

如果您的代码应该在不同的环境中运行,我会考虑使用Environment.NewLine常量,因为它特别newline适用于特定环境.

line = line.Replace(Environment.NewLine, "newLineReplacement");
Run Code Online (Sandbox Code Playgroud)

但是,如果从源自另一个系统的文件中获取文本,则这可能不是正确的答案,您应该替换为在另一个系统上使用的任何换行常量.它通常是\n\r\n.


tva*_*son 14

不要忘记replace不会在字符串中进行替换,而是返回一个替换了字符的新字符串.以下将删除换行符(不替换它们).如果用其他东西替换它们,我会使用@Brian R. Bondy的方法,可能包装为扩展方法.请记住在调用Replace或提供的扩展方法之前先检查空值.

string line = ...

line = line.Replace( "\r", "").Replace( "\n", "" );
Run Code Online (Sandbox Code Playgroud)

作为扩展方法:

public static class StringExtensions
{
   public static string RemoveLineBreaks( this string lines )
   {
      return lines.Replace( "\r", "").Replace( "\n", "" );
   }

   public static string ReplaceLineBreaks( this string lines, string replacement )
   {
      return lines.Replace( "\r\n", replacement )
                  .Replace( "\r", replacement )
                  .Replace( "\n", replacement );
   }
}
Run Code Online (Sandbox Code Playgroud)

  • 你在这里犯的错误证明它更好.我工作过的大多数公司都有编码标准 - 不要使用硬编码的标准. (2认同)
  • @Califf 我犯的“错误”不会在带有 Intellisense 的 IDE 中产生,也不会编译。如果您觉得 `string.Empty` 更好,请务必使用它。 (2认同)

Dom*_*ski 9

要确保替换所有可能的换行方式(Windows,Mac和Unix),您应该使用:

string.Replace("\r\n", "\n").Replace('\r', '\n').Replace('\n', 'replacement');
Run Code Online (Sandbox Code Playgroud)

并且按此顺序,当你找到一些行结束字符的组合时,不要进行额外的换行符.


Mat*_*nze 6

var answer = Regex.Replace(value, "(\n|\r)+", replacementString);
Run Code Online (Sandbox Code Playgroud)


小智 6

我需要\r\n用实际的回车和换行替换\t,并用实际的标签替换.所以我想出了以下内容:

public string Transform(string data)
{
    string result = data;
    char cr = (char)13;
    char lf = (char)10;
    char tab = (char)9;

    result = result.Replace("\\r", cr.ToString());
    result = result.Replace("\\n", lf.ToString());
    result = result.Replace("\\t", tab.ToString());

    return result;
}
Run Code Online (Sandbox Code Playgroud)


RAY*_*RAY 6

为什么不同时?

string ReplacementString = "";

Regex.Replace(strin.Replace(System.Environment.NewLine, ReplacementString), @"(\r\n?|\n)", ReplacementString);
Run Code Online (Sandbox Code Playgroud)

注意:strin输入字符串的名称替换。


eww*_*ink 5

如果您想“清理”新行,使用正则表达式的Flamebaud注释@"[\r\n]+"是最佳选择。

using System;
using System.Text.RegularExpressions;

class MainClass {
  public static void Main (string[] args) {
    string str = "AAA\r\nBBB\r\n\r\n\r\nCCC\r\r\rDDD\n\n\nEEE";

    Console.WriteLine (str.Replace(System.Environment.NewLine, "-"));
    /* Result:
    AAA
    -BBB
    -
    -
    -CCC


    DDD---EEE
    */
    Console.WriteLine (Regex.Replace(str, @"\r\n?|\n", "-"));
    // Result:
    // AAA-BBB---CCC---DDD---EEE

    Console.WriteLine (Regex.Replace(str, @"[\r\n]+", "-"));
    // Result:
    // AAA-BBB-CCC-DDD-EEE
  }
}
Run Code Online (Sandbox Code Playgroud)