2

空の/空白のみの行を含むすべての余分な改行に一致するC#互換の正規表現を見つけようとしました。これにより、次のものを置き換えることができます。

最初の行
    二行目

3行目

お気に入り:

最初の行
    二行目
3行目

末尾の改行なし。

よく知られている複数行が最後の改行と一致^\s*$しません。

私はそれを思い付くことができまし(?<!\S+)\r\n|(\r\n)+\zた:

  1. シングルラインモードとマルチラインモードの両方で機能します
  2. 醜くておそらく遅い

誰かが同じことをするための簡単な正規表現を思い付くことができましたか?

4

2 に答える 2

5

その理由は、最後の行に何もない場合、文字列の最後の$aの前に一致するためです。\n

間にある空の行の場合

^\s*^

^改行の後に一致します\n。したがって、これは行の先頭から次の行までの空白に一致します。

最後の空の行については、最後の改行の前からすべての空白を文字列の最後まで一致させる必要があります

$\s*\z

と組み合わせて

^\s*^|$\s*\z

\z一致は文字列の最後で発生する必要があります

msdnのアンカーを参照してください

私のテスト:

string s = "This is the first row\n\nThis is the third\n    \nThis the fifth\n";

string result = Regex.Replace(s, @"^\s*^|$\s*\z", "", RegexOptions.Multiline);
Console.WriteLine(result);

Console.WriteLine("fin");
Console.ReadLine();
于 2012-10-15T12:37:06.117 に答える
1

末尾の改行を取り除くには、ハイブリッドアプローチはどうですか。

Regex.Replace(input, @"^\s+$", "", RegexOptions.Multiline).TrimEnd()

シンプルで読みやすい。

于 2012-10-15T18:15:28.690 に答える