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

おそらく次のようなものです:

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が通常の動作を意味する場合は、連続する空白行を1つの空白行に置き換えています。

そのためのツールがあると確信しています。ただし、C#についてはわかりません。

于 2009-08-27T13:01:51.580 に答える
0

Regexsなし(頭が痛くなる)

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

ほんの数日前、SOでもほぼ同じ質問がありました。NewLineの問題はなく、空白の場所に問題がありました。

また、Split、Join方式を好む人もいれば、正規表現を使用する他のサイトもありました。そこで、Jonは両方を比較したところ、コンパイル正規表現の方がはるかに高速であることがわかりました。

しかし、私はこの質問を再び見つけることができません...

于 2009-08-27T13:12:58.633 に答える