私は実際に大きな文字列のRegex変換を最適化していました。 Regex.Replaceにはいくつかの呼び出しは、私は条件付きの呼び出しを挿入し、かなりの時間を要したとして - 線に沿って何か大文字と小文字を区別しないasciiサブ文字列を効率的に検索
if (str.IndexOf("abc", 0, StringComparison.CurrentCultureIgnoreCase) > 0)
str1 = Regex.Replace(str, "abc...", string.Empty, RegexOptions.IgnoreCase);
を驚いたことに結果は説得力がありませんでした。ときには良い、時にはない。またはさらに悪い。だから私は、大文字小文字を区別しないIndexOfメソッドのパフォーマンスを(私もStringComparison.OrdinalIgnoreCaseを試してみました)を測定し、それがこのテストすなわち、Regex.Matchよりも遅くなることが分かっ:特に一致しませんでした大きな文字列のための
if(Regex.Match(str,"abc", RegexOptions.IgnoreCase).Success)...
(アスキー)string "abc" Regex.Matchが4倍速かったことがわかりました。
であっても、この手順では、IndexOfメソッドよりも高速です:
string s1 = str.ToLower();
if(s1.IndexOf("abc")) ...
誰もがよりよい解決策を知っていますか?
なぜ文字列が存在し、置き換えられているのですか? – Magnus
Regex.Replaceは非常にコストがかかる操作であり、Regexがまったくマッチしない可能性が高い場合など、まず簡単なテストを行うのが理にかなっています。 –
平均して私はToLower変換に基づいて準解をコード化しました。条件付きでこのようにテストすることができるRegex呼び出しが繰り返されているので、これは実質的に役に立ちます。 –