gpt4 book ai didi

c# - .net core 限制\r\n 为两行

转载 作者:行者123 更新时间:2023-12-02 02:49:49 25 4
gpt4 key购买 nike

我正在获取原始数据字符串,并且我不想允许超过 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"

最佳答案

如果您只想显示最多两个换行符,请仅将大于两个的换行符替换为前两个换行符。这将保留它是换行还是回车或两者兼而有之。

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\r\n\n\n\n\r\r\r (仅当下一个值不是 \n 时,最后两个值才会贪婪地匹配其他值之一)。之后它只匹配任何序列,因为我们无论如何都计划丢弃它们。

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

Regex Storm example

如果您想替换为当前平台的换行符,这应该可行:

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");

关于c# - .net core 限制\r\n 为两行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62179724/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com