私が持っている場合:
Some text
More text
Even more text
取得するためのよりエレガントな方法は何ですか:
Some text
More text
Even more text
繰り返されるトークンの数を知っているすべて
正規表現を使用してこれを行う方法は次のようになります。
string replaced = System.Text.RegularExpressions.Regex
.Replace(input, @"(?:\r\n)+", "\r\n");
((?:...)
構文は非キャプチャーグループであり、キャプチャーグループ(ちょうど(...)
)に置き換えることができますが、効率が少し低下し、読みにくくなります、IMO。)
おそらく次のようなものです:
var result = string.Join("\r\n", s.Split(new[]{"\r\n"}, StringSplitOptions.RemoveEmptyEntries))
正規表現を使用します。文字列全体'\r \ n'を照合し、単一の' \ r\n'に置き換えます
必要な機能:
pattern = "(\\r\\n)+";
Regex rgx = new Regex(pattern);
newString = rgx.Replace(oldString, "\r\n");
編集:以前の+を見逃してしまったことをお詫びします
C#構文はわかりませんが、単純な正規表現を使用して(\ r \ n)+を(\ r \ n)に置き換えてください。
正規表現を使用できます。
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
。それはデータがどこから来たかによります。
\ r \ nが通常の動作を意味する場合は、連続する空白行を1つの空白行に置き換えています。
そのためのツールがあると確信しています。ただし、C#についてはわかりません。
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();
}
初期チェックは最初のバージョンでも同様に有効です
最速の方法:
Regex reg = new Regex(@"(\r\n)+");
string replacedString = reg.Replace("YOUR STRING TO BE REPLACED", Environment.NewLine);
ほんの数日前、SOでもほぼ同じ質問がありました。NewLineの問題はなく、空白の場所に問題がありました。
また、Split、Join方式を好む人もいれば、正規表現を使用する他のサイトもありました。そこで、Jonは両方を比較したところ、コンパイル正規表現の方がはるかに高速であることがわかりました。
しかし、私はこの質問を再び見つけることができません...