2016-04-17 13 views
0

こんにちは私のソーステキストファイルで余分な空白行を削除したいのです(2つ以上の空白行に空白行が1つしかない場合)。私はこのパターンを使用:VS StyleCopは複数があると文句を言い、(ライン3)上記正規表現を使用してテキストファイルの余分な空白行を削除します

1. BlablablaCRLF 
2. CRLF 
3. 

は、ファイルの終わりです:

^(\s*(\n|\r|\r\n)){2,} 

は、それはこのように、ファイルの末尾に空白行を処理することができませんここに空白行。ファイルの最後に改行のように見えますが、実際には何も表示されません。メモ帳の++で「すべての文字を表示」をオンにしましたが、ファイルの最後にCRLFが表示されることを期待していました。私のパターンはこれを識別することができません、どのようにこのケースを処理するには?ありがとう!

+0

あなたの正規表現には、少なくとも '\ n'、' \ r'または '\ r \ n'のいずれかと一緒に少なくとも' \ s'(もしあれば)と一致すると言われています – rock321987

+0

stylecop resharperには、特定の違反のための自動修正があるので、独自の正規表現を動かすことなく、ソリューション全体を修正することができます。 (とにかくそれを行う小さなコンソールアプリケーションを書くのは簡単かもしれません)。 – briantyler

答えて

1

基本的な回答

これはあなたが一致したいものである場合は、次の複数の手段> 1.

    1. 複数の連続した空行を除くファイルの末尾にすべての空行\nによって暗黙的に生成され、ファイルを終了します(これは良い方法と見なすことができます、hereを参照)。
    2. 終了後の冗長な空白文字\n

    次に、このパターンはあなたを助けるかもしれない:

    (^\s*(\r|\n)){2,}|^\s+(\r|\n)?\Z 
    

    さらに説明

    最初の部分(^\s*(\r|\n)){2,}は、ファイルの末尾に^\s+(\r|\n)?\Z試合冗長、1の空行を第二部の面倒を見ますまたは冗長な空白の末尾にある\nに続いています。

    あなたのファイルは(Unixファイル語尾で)このようになります場合は...

    1. FirstLine\n 
    2. 
    3. ThirdLine\n 
    4. FourthLine\n 
    5. 
    6. 
    7. SeventhLine\n 
    

    は...それだけで終わりに線5,6、何も一致します。メモ帳++しかし、終了のために最後に8行目が表示されます\n。ただし、ファイルの末尾に複数の\nがある場合、または第7行に\nの終了後に追加の\tまたはスペースがある場合は、theeseが一致します。あなたも\n終了によって生成された行を一致させたい場合は

    、あなたにも代わりに正規表現の第二部のため^\s*\Zを使用することができます(交換するとき、結果として\n終了を削除します)。

    \s*(\r\n)の補足説明:\s\n\rを含んでいるので、これはabc\nabc\r\nまたはabc\rのようなすべての許可の組み合わせに一致します。

    \Zは、ファイル/入力全体の末尾に一致します(ただし、$は行の末尾にのみ一致します)。

    私は、正規表現の短いバージョンがあるかもしれないと確信していますが、私の最初の意図は、それが機能し理解できるようにすることでした。

  • +0

    私の編集を見てください(おそらく "少なくとも2つのマッチ"の問題を解決する)単一行を処理するためのソリューションです。 :) – mxscho

    +0

    ありがとうございますが、私は1つの空白行を残したい場合はどうすればいいですか? \ nが2回以上現れる場合は、「\ n」に置き換えてください。ファイルの終わりに\ nが表示されたら、\ n(空文字列に置き換えてください)を削除します。これを正規表現でどのように表現するのですか?ありがとう! @mxscho – codewarrior

    +0

    それは明らかに質問を変えます。少なくとも私があなたが最初に達成したかったことを気づいていなかったのです。私はしばらく時間をとって答えを完全に書き直しました。だからこんにちは、これは今あなたを助けてくれるかもしれません。 – mxscho

    関連する問題