C#用一个标记替换x重复标记的最佳方法

时间:2009-08-27 12:53:34

标签: c# regex token

如果我有:

Some text



More text






Even more text

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

Some text

More text

Even more text

所有人都知道重复令牌的数量

9 个答案:

答案 0 :(得分:7)

使用正则表达式的方法是

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

(?:...)语法是一个非捕获组,可以用捕获组替换(只有(...)),但效率稍低且不易读,IMO。)< / p>

答案 1 :(得分:6)

也许是这样的:

var result = string.Join("\r\n", s.Split(new[]{"\r\n"}, StringSplitOptions.RemoveEmptyEntries))

答案 2 :(得分:3)

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

您需要的功能:

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

newString = rgx.Replace(oldString, "\r\n");
编辑:抱歉错过了早期的

答案 3 :(得分:1)

我不知道C#语法,只是使用一个简单的正则表达式替换(\ r \ n)+和(\ r \ n)

答案 4 :(得分: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常量。这取决于数据的来源。

答案 5 :(得分:0)

如果\ r \ n表示通常的作用,则用一个空白行替换连续的空白行。

我确信有这方面的工具。不过我不会知道C#。

答案 6 :(得分: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();
}

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

答案 7 :(得分:0)

最快的方式:

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

string replacedString = reg.Replace("YOUR STRING TO BE REPLACED", Environment.NewLine);

答案 8 :(得分:0)

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

还有一个人喜欢使用Split,Join方法,另一个人使用正则表达式。因此Jon对两者进行了比较,结果表明编译正则表达式要快得多。

但我再也找不到这个问题......