正規表現で文字列を含む行、文字列を含まない行を選択、置換する(vscode、サクラエディタ)

テキストエディタでよく利用するテクニックの一つです。

正規表現で文字列を含む行、文字列を含まない行を選択、置換する

logなど、長いテキストから任意の文字列を含む行を選択する正規表現と、それとは逆に、文字列を含まない行を選択する正規表現のサンプルになります。

正規表現は、VSCode、ATOM、SublimeTextからサクラエディタまで、よく利用されるエディタでは、基本的にサポートしている機能です。

今回はエディタに、VSCodeを利用します。

コピー用一覧

内容 正規表現
文字列を含む行を検索.*文字列.*
文字列を含む行を削除(置換)(LF).*文字列.*\n
文字列を含まない行を検索^(?!.*文字列).*
文字列を含まない行を削除(置換)(LF)^(?!.*文字列).*\n

※サクラエディタなどでShift-JISのファイルを扱っている場合は、上記“\n”(LF)を“\r\n”(CRLF)に置き換えます

その他の正規表現の基本的な書き方はこちらをご覧ください。

以下、各正規表現の使用例です。

正規表現で文字列を含む行を検索する

正規表現 文字列を含む行を検索するコマンド

.*文字列.*

VScodeでは「Ctrl」+「F」で検索のウインドウが表示されます。

また、正規表現を利用するには正規表現を有効にする必要があります。VSCodeの場合、検索ウインドウが表示されている状態で「Alt」+「R」を押すか、検索ウインドウの右側にある「Use Ragular Expression」ボタンを押します。

画像は、VSCodeで”「あい」を含む行”を検索しています。

正規表現 文字列を含む行を削除(置換)するコマンド(LF)

.*文字列.*\n

一部の条件に当てはまる行を削除したい時に利用します。私の場合、logから共通フレームワークなどの特定のアプリケーションのログのみ削除したい場合などに利用しています。

VScodeでは「Ctrl」+「H」で置換(Replace)のウインドウが表示されます。

画像は、VSCodeで「あい」を含む行を削除(ブランク(空白)に置換)しています。

※改行コードは「\n」で指定します。

正規表現 文字列を含む行を削除するコマンド(CRLF)

.*文字列.*\r\n

さくらエディタでは、デフォルトで改行コードがCRLFとなっており、「\r\n」となります。

では、続いて逆の文字列を含まない行の選択を行います。

正規表現で文字列を含まない行を選択する

正規表現 文字列を含まない行を検索するコマンド

^(?!.*文字列).*

VScodeでは「Ctrl」+「F」で検索のウインドウが表示されます。

画像は、VSCodeで「あい」を含まない行を検索しています。

正規表現 文字列を含まない行を削除(置換)するコマンド(LF)

^(?!.*文字列).*\n

一部の条件に当てはまらない行を削除したい時に利用します。私の場合、logから特定のアプリケーションのログのみ残したい場合などに利用しています。

VScodeでは「Ctrl」+「H」で置換(Replace)のウインドウが表示されます。

画像は、VSCodeで「あい」を含まない行を削除(ブランク(空白)に置換)しています。

※改行コードは「\n」で指定します。

正規表現 文字列を含まない行を削除するコマンド(CRLF)

^(?!.*文字列).*\r\n

さくらエディタでは、デフォルトで改行コードがCRLFとなっており、「\r\n」となります。


正規表現 解説

正規表現で文字列を含む行を検索する場合、「.*文字列.*」を指定しました。

「.」(ドット)は、1文字で何が入ってもOK(ヒットする)という意味です。

「*」(アスタリスク)は、直前の要素の繰り返し(0回含む)という意味です。

「.*」は、1つの文字が0回以上あれば、ということになります。

したがって、「.*文字列.*」を指定した場合、「文字列」の前後に何か入力がある行が対象となります。

文字列を含まない行を検索する場合、「^(?!.*文字列).*」を指定しました。

「^」(キャレット または チルダ)は、行の先頭を意味します。

「(?!XXX)」は、カッコ()内のXXXが含まれていないという意味です。

したがって、「^(?!.*文字列).*」を指定した場合、先頭からみて「文字列」が含まれていない場合、行が対象となります。