0

如果我有:

Some text



More text






Even more text

什么是更优雅的获取方式:

Some text

More text

Even more text

都知道重复令牌的数量

4

9 回答 9

7

使用正则表达式的方法是

string replaced = System.Text.RegularExpressions.Regex
    .Replace(input, @"(?:\r\n)+", "\r\n");

(?:...)语法是一个非捕获组,可以用一个捕获组(只是(...))替换,但效率稍低且可读性较差,IMO。)

于 2009-08-27T13:00:51.877 回答
6

Perhaps something like:

var result = string.Join("\r\n", s.Split(new[]{"\r\n"}, StringSplitOptions.RemoveEmptyEntries))
于 2009-08-27T12:58:02.903 回答
3

使用正则表达式。匹配整个字符串 '\r\n' 并替换为单个 '\r\n'

您需要的功能:

pattern = "(\\r\\n)+";
Regex rgx = new Regex(pattern);

newString = rgx.Replace(oldString, "\r\n");

编辑:很抱歉错过了 + 早先

于 2009-08-27T12:55:42.373 回答
1

我不知道 C# 语法,但只需使用简单的正则表达式将 (\r\n)+ 替换为 (\r\n)

于 2009-08-27T13:00:25.340 回答
0

您可以使用正则表达式:

str = Regex.Replace(str, "(\r\n)+", "\r\n")

另一种方法可能是在换行符上拆分删除空条目,然后再次加入:

str = String.Join("\r\n", str.Split(new string[]{"\r\n"}, StringSplitOptions.RemoveEmptyEntries);

考虑是否应该使用字符串文字"\r\n"Environment.NewLine常量。这取决于数据的来源。

于 2009-08-27T13:01:43.780 回答
0

如果 \r\n 表示它通常的作用,那么您将用单个空行替换连续的空行。

我确信有用于此目的的工具。不过,我不知道 C#。

于 2009-08-27T13:01:51.580 回答
0

没有正则表达式(这让我很头疼)

string RemoveRepeated(string needle, string haystack)
{
    string doubleNeedle = needle + needle;

    while (haystack.IndexOf(doubleNeedle) >= 0)
        haystack = haystack.Replace(doubleNeedle, needle);
    return haystack;
}

更少的内存分配

string RemoveRepeated(string needle, string haystack)
{
    if (needle == null)
        throw new ArgumentNullException("needle");

    if (haystack == null)
        throw new ArgumentNullException("haystack");

    if (needle == string.Empty || haystack == string.Empty)
        return haystack;

    string doubleNeedle = needle + needle;
    var buffer = new StringBuilder(haystack);
    int originalLength;
    do
    {
        originalLength = buffer.Length;
        buffer.Replace(doubleNeedle, needle);
    } while (originalLength != buffer.Length);

    return buffer.ToString();
}

初始检查在第一个版本中也同样有效

于 2009-08-27T13:02:12.580 回答
0

最快的方法:

Regex reg = new Regex(@"(\r\n)+");

string replacedString = reg.Replace("YOUR STRING TO BE REPLACED", Environment.NewLine);
于 2009-08-27T13:03:55.090 回答
0

就在几天前,这里有几乎相同的问题。问题不是 NewLine,而是空格。

还有一个人更喜欢 Split、Join 方法和另一个使用正则表达式的网站。所以 Jon 对两者进行了比较,结果发现编译正则表达式要快得多。

但我就是找不到这个问题了......

于 2009-08-27T13:12:58.633 回答