テキストから指定の文字列を含む行を残し、それ以外の行を削除する手順(否定的先読みの正規表現)

記事内に広告が含まれています。
《スポンサーリンク(広告)》

※エンジニアは英語必須!業界初の定額レッスン無制限!オンラインで英語を学習しませんか?

《スポンサーリンク(広告)》

指定文字を含む行を削除することは簡単な正規表現でできます。

しかし指定文字列を含む行を残して、それ以外の行を削除する正規表現は、案外思いつかなかったりするので手順として残しておきます。

《スポンサーリンク(広告)》

coconalaはロゴデザイン、Webマーケティング、副業のあらゆるスキルのマーケットです(ビジネス・個人問わないサービス)

《スポンサーリンク(広告)》

実行環境

今回はサクラエディタと呼ばれる、ボランティアベースで開発されている素晴らしいテキストエディタで正規表現を実行しております。

ただ、正規表現さえ使用可能であれば、エディタは何でも良いかと思います。

Sakura Editor
Japanese text editor for MS Windows

解決したい事象

指定文字列を含む行は残し、それ以外の行は削除します。

ここではerror行のみ抽出して、それ以外の雑多な行を削除するlog抽出の例を考えてみます。

(ここまで書いてて、そういえばGrepすれば簡単じゃんと思ったけど)

事象の例

例としては下記の通り、文字列が並んでいるとします。※分かりやすくするため、行数は短めで適当な内容です。

あいうえお error xxx
かきくけこ normal end xxx
さしすせそ error yyy
たちつてと warning xxx
なにぬねの error zzz
はひふへほ warning xxx
まみむめも normal end xxx

下記の通り、error行以外を削除するのが今回のゴールです。

あいうえお error xxx
さしすせそ error yyy
なにぬねの error zzz

使用する正規表現

エディタの「置換前」および、「置換後」の指定で、下記の正規表現を指定します。

サクラエディタの場合、Ctrl+Rで置換ダイアログが出てきますので、そこで下記の値を指定します。(なおサクラエディタの場合、この際「正規表現」のチェックボックスにチェックを入れないと正規表現で認識されないので注意が必要です。)

置換前

^(?!.*error).+\r\n

否定的先読みという正規表現の記述をします。

?! で始まる正規表現を括弧 () で括ることにより、指定した文字列を含まないという条件でマッチングします。

つまりこの場合、()に.*errorという文字列を指定し、errorを含まない文字列でマッチングを試みています。

置換後

(未入力)

置換後は何も未入力にすることで、「置換前」でヒットした文字列を削除します。

サクラエディタでの入力例

サクラエディタを例とした場合、置換ダイアログに下記の通り記述します。

サクラエディタでの入力例

試しに、「該当行をマーク」ボタンをクリックすると、思い通りにerror行以外が選択されています。

正規表現実行結果

正規表現実行前

下記のテキストに対して、先ほどの正規表現を使用して全て置換してみます。

正規表現実行後

置換を実行すると、errorの文字列を含む行以外は削除されたことが確認できました。

参考

冒頭で簡単と記述した、指定した文字列を含む行を消す場合はどうすればよいか?※errorだけ削除したいケース

これは簡単で、否定的先読みの部分を削除した正規表現を実行すればよいです。

正規表現実行前

正規表現実行後

以上です。

コメント

タイトルとURLをコピーしました