テストを作成しましたが、これは機能します:
[\r\n]*-{34}[\w\s\n\r]*
コードは次のとおりです。
var input = @"Message body blah blah balh
----------------------------------
Custom footer text";
var pattern = @"[\r\n]*-{34}[\w\s\n\r]*";
var clean = Regex.Replace(input, pattern, "", RegexOptions.Multiline);
Console.WriteLine(clean);
出力は期待されるものです:
Message body blah blah balh
最初のアプローチにはいくつかの問題がありました。それらのいくつかは、上記のコメントでabc667によって指摘されました。
他の 2 つを次に示します。
を実行すると(\r\n)
、正確な文字シーケンス CR、LF が期待されます。\n
ただし、一部のオペレーティング システムでは、改行を(LF)だけで表すことができます。両方のケースでパターンを機能させるには、次のように文字クラスを使用できます[\r\n]*
。これは、「任意の順序で見つけることができるおよび/または文字のすべてのシーケンス」\n
\r
を意味します。
ドット ( .
) は、\n を除く任意の 1 文字に一致します ( docsを参照)。一部の正規表現フレーバーでは、特別な条件下で改行にも一致する場合があります ("(dot)" hereを参照) が、.NET では一致しません。.*
これが、点線の後のすべてに一致するはずだった を、[\w\s\r\n]*
任意の単語文字、スペース文字、CR および LFに一致するものに置き換えた理由です。