Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# .net核心限制\r\n为两行_C#_.net_.net Core - Fatal编程技术网

C# .net核心限制\r\n为两行

C# .net核心限制\r\n为两行,c#,.net,.net-core,C#,.net,.net Core,我得到了一个原始的数据字符串,我不想允许超过2行的新行,我对源代码没有控制权,但是我只想显示当前行的末尾,在任何情况下显示一个间隙行,我无法找到一个很好的解决方案 以下是数据示例: "content": "Ldfjljildjbfd\r\n\r\nEihile\r\n\r\n\r\n\r\n\r\n\r\nErlgheiorjgoierjhg\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\neighi\r\n" 以下是当前屏幕上显示的示例: Thi

我得到了一个原始的数据字符串,我不想允许超过2行的新行,我对源代码没有控制权,但是我只想显示当前行的末尾,在任何情况下显示一个间隙行,我无法找到一个很好的解决方案

以下是数据示例:

"content": "Ldfjljildjbfd\r\n\r\nEihile\r\n\r\n\r\n\r\n\r\n\r\nErlgheiorjgoierjhg\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\neighi\r\n"
以下是当前屏幕上显示的示例:

This is my example






It doesn't look particularly appealing
下面是我希望它看起来如何的一个例子:

This is my example

Much better here...
我试着用最肮脏的方式来做这件事,用的方法如下:

    private string DirtyLineClean(string body)
    {
        string body1 = body.Replace(@"\r\n\r\n\r\n\r\n\r\n\r\n", "\r\n\r\n");
        string body2 = body1.Replace(@"\r\n\r\n\r\n\r\n\r\n", "\r\n\r\n");
        string body3 = body2.Replace(@"\r\n\r\n\r\n\r\n", "\r\n\r\n");
        string body4 = body3.Replace(@"\r\n\r\n\r\n", "\r\n\r\n");

        return body4;
    }
不幸的是,这根本不起作用

欢迎任何建议

更新

使用LarsTech的回答,有些东西不太管用。以下是我的意见:

Ldjgehgoierg\r\n\r\nErg\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nGergege\r\n\r\n\r\n\r\nErgerg\r\n\r\nEg\r\n\r\nEr\r\n\r\nGer\r\n\r\n\r\n\r\n\r\n\r\nrgg\r\n
以下是输出:

Ldjgehgoierg\r\n\n\r\n\nErg\r\n\n\r\n\n\r\n\n\r\n\n\r\n\n\r\n\n\r\n\n\r\n\nGergege\r\n\n\r\n\n\r\n\n\r\n\nErgerg\r\n\n\r\n\nEg\r\n\n\r\n\nEr\r\n\n\r\n\nGer\r\n\n\r\n\n\r\n\n\r\n\n\r\n\n\r\n\nrgg\r"

尝试使用正则表达式:

var results = Regex.Split(s, @"\t|\n|\r").Where(m => !string.IsNullOrWhiteSpace(m)).Take(2);

Console.WriteLine(string.Join("\r\n\r\n", results)) // "\r\n\r\n" can be changed to however you'll like the results to be formatted as

拆分和联接可以实现以下功能:

var s= "Ldfjljildjbfd\r\n\r\nEihile\r\n\r\n\r\n\r\n\r\n\r\nErlgheiorjgoierjhg\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\neighi\r\n";
var lines = s.Split(Environment.NewLine, StringSplitOptions.RemoveEmptyEntries);
return string.Join(Environment.NewLine + Environment.NewLine, lines);
我不想允许超过2条新线路

这基本上是LarsTech已经发布的内容(我对他的答案投了赞成票),除了我在末尾加了一个
Take(2)
,所以我们只得到了两行。即使原始数据中只有一行,这也会起作用:

string data = "Ldfjljildjbfd\r\n\r\nEihile\r\n\r\n\r\n\r\n\r\n\r\nErlgheiorjgoierjhg\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\neighi\r\n";
string twoLines = String.Join(Environment.NewLine, data.Split(Environment.NewLine.ToCharArray(), StringSplitOptions.RemoveEmptyEntries).Take(2));

若您只想最多显示两个换行符,那个么将大于两个换行符的内容替换为只显示前两个换行符。这将保留它是换行还是回车,或者两者兼而有之

using System.Text.RegularExpressions;

var result = Regex.Replace(source, "((?:\r\n?|\n){2})[\r\n]+", "$1");
此正则表达式将首先尝试使用“完整”回车+换行序列,否则它将匹配单个组件。例如,这将考虑一个序列:<代码> \r\n\n>代码>为两个,而不是三个。类似地,以下内容将在序列开始时全部使用:
\n\r\n
\r\n\r\n
\r\n
\n\n
\n\r
\r\r
(只有当下一个值不是
\n
时,后两个值才会非常匹配)。之后,它只匹配任何序列,因为我们计划无论如何丢弃它们

替换文本
“$1”
表示整个匹配(三个或更多回车/换行)应替换为第一个捕获组的内容(前两个,逐字)

如果要替换为当前平台的换行符,则应该可以:

var result = Regex.Replace(source, "(?:(?:\r\n?|\n){2})[\r\n]+", Environment.NewLine + Environment.NewLine);
在本例中,我将第一组设置为非捕获(
?:
),因为我们不再需要保留内容。这是一个潜在的小优化

注意:正则表达式确实有一些开销。如果您打算经常这样做,那么最好将正则表达式与
RegexOptions一起存储在静态字段中。Compiled
标志:

private static readonly Regex NewLineRegex = new Regex("((?:\r\n?|\n){2})[\r\n]+", RegexOptions.Compiled);

var result = NewLineRegex.Replace(source, "$1");

您可能需要查看
string.Split()
string.Join()
方法。此方法的输出是“ldfjljildjbfdeihillergheiorjgoierjheighi”。我想将其限制为仅两行,而不是零。对不起,字符串.empty在显示之前\r\n\r\n对不起,我误读了问题。您仍然可以使用正则表达式来获得结果。我已经亲自更新了它,我认为这个解决方案比其他解决方案更好(尽管我没有在电脑前验证),它在性能和内存分配方面会是最好的。类似Regex.Replace(source),((\r(\n)?\n){2}[\r\n]+,“\r\n\r\n”)的东西实际上可能最有效,因为我希望保留现有的换行符(我们正在保留的换行符),而不是将它们转换成其他东西(您的Cr+Lf x2)。显然,我们可以将其强制为Environment.NewLine x2,使其更为xplat。如果你更喜欢这个解决方案,乐观是合适的!我对正则表达式添加了一些解释,并建议将正则表达式存储在一个字段中,该字段使用编译后的flagridly。这对我来说不太管用,它在\n中分裂,但我留下来的是\r要加入的列表的一部分。我将更新问题以显示结果。我已经用Lars方法更新了问题,因为它不太有效。我很感激这个答案,但是,我的意思是每一条电流单独的线路最多2条线。