私は C# で一種の Telnet クライアントを作成していますが、解析する必要があるものの一部は ANSI/VT100 エスケープ シーケンスです。具体的には、色と書式設定に使用されるものだけです (詳細はこちら)。
私が持っている 1 つの方法は、すべてのコードを見つけて削除することです。そのため、必要に応じて書式設定なしでテキストをレンダリングできます。
public static string StripStringFormating(string formattedString)
{
if (rTest.IsMatch(formattedString))
return rTest.Replace(formattedString, string.Empty);
else
return formattedString;
}
私は正規表現が初めてで、これを使用するように提案されました:
static Regex rText = new Regex(@"\e\[[\d;]+m", RegexOptions.Compiled);
ただし、サーバー上のエラーが原因でエスケープ コードが不完全な場合、これは失敗しました。それで、これが提案されましたが、私の友人はそれが遅くなる可能性があると警告しました(これは、後で遭遇する可能性のある別の条件(z)にも一致します):
static Regex rTest =
new Regex(@"(\e(\[([\d;]*[mz]?))?)?", RegexOptions.Compiled);
これは機能しただけでなく、実際には高速で、テキスト レンダリングへの影響を軽減しました。誰かが正規表現の初心者に説明できますか? :)