【正規表現】特定の文字列が含まれる行を抽出し、任意の文字列のみを並べる方法

スポンサーリンク
Tips

仕事でよく使う正規表現のシチュエーションと対応を備忘的に記載します。役に立つ方がいれば。

やりたいこと

例えば以下のようなテキストファイルがあったとして、

        抽出対象:A
        抽出対象:B
    削除したい行
        抽出対象:C
        抽出対象:D
    削除したい行
    削除したい行
        抽出対象:E
        抽出対象:F
        抽出対象:G
        抽出対象:H
    削除したい行 抽出条件
    削除したい行 抽出
    削除したい行 条件
    削除したい行 
    削除したい行
    削除したい行
        抽出対象:I
    削除したい行
    削除したい行
        抽出対象:J
        抽出対象:K

この中から、「抽出対象:」と記載ある行の右側の値のみを並べてコピーしたい。
最終的には正規表現を使って以下のような形にしたい。

A
B
C
D
E
F
G
H
I
J
K

例だと数行なのでExcelに移してセル単位でうまく切り取ったり、手動コピーでもいけそうですが、ソースコード等数千行あるファイルだと面倒だなと思っており、今回方法を書こうと思いました。

やり方解説していきます!

解説

以下3つに分けて方法を解説していきます。

  1. 特定の文字列が存在しない行を削除する
  2. 空白行を削除する
  3. 指定文字列から左側の文字列を全て削除する

①特定の文字列が存在しない行を削除する

例で言うと、「抽出対象:」と記載のない行を削除する置換を行います。
具体的には、以下を入力して置換します。

上段 (Find):^((?!抽出対象:).)*$
下段 (Replace):記載なし

↓実行後
「抽出対象:」と記載のない行を削除することができました。

②空白行を削除する

うまく「抽出対象:」と記載のない行は削除されましたが、空行になってしまったため削除します。
具体的には、以下を入力して置換します。

上段 (Find):^\n
下段 (Replace):記載なし

↓実行後
空行が削除できました。

※改行コードによっては^\r\n出ないとうまく削除できないかもしれません。

③指定文字列から左側の文字列を全て削除する

残りは「抽出対象:」の文字列を削除します。
具体的には以下を入力して置換します。

上段 (Find):.*?抽出対象:
下段 (Replace):記載なし

↓実行後
「抽出対象:」の文字列が削除されました。

これで完了です!

参考にしたサイト

正規表現で不要な行を削除し、必要な行だけ残す方法
https://sun-san-tech.com/regex/503/

空行を削除する置換(正規表現)
https://qiita.com/Shoichiro_mahjong/items/9900a8fd08384d2908db

正規表現_先頭から任意の文字までを選択
https://koshinran.hateblo.jp/entry/2018/02/18/192314

Tips正規表現
スポンサーリンク
app crafts

コメント

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