正規表現置換を使用してCSVファイルの必要な箇所だけ残す方法

正規表現

目次

前回のこちらの記事ではCSVファイルの不要部分を切り落とす方法をお伝えしました。

ただし、上記記事の方法では以下のようなことには対応できませんでした。

  • 1番目と3番目の列だけ取り出したい
  • その逆で、1番目と3番目の列を切り落として、2番目の列だけ残す

今回お伝えする正規表現置換のキャプチャを使用することで、上記のことが実現できるようになります。

CSVの特定の列だけ取り出す方法

例えば、下記のようなファイルがあるとします。

このファイルから1番目と3番目の列だけを取り出すように正規表現置換を行います。

置換前

^(.*?),(.*?),(.*?),(.*?)$

置換後

$1,$3

置換するとこのような結果になります。

CSVファイルの1番目(ID)と3番目(役職)の列だけを取り出すことができました。

応用

2番目と4番目の列だけを取り出したい場合は、置換後を以下のように変更します。

置換後

$2,$4

CSVファイルの2番目(名前)と4番目(給料)の列だけを取り出すことができました。

また、3番目⇒1番目のように、置換後に順番を入れ替えたい場合は以下のように記述します。

置換前

$3,$1

3番目⇒1番目の順に取り出すことができました。

解説

キャプチャ

上記の正規表現置換にはキャプチャを使用しています。
キャプチャについてはこちらの記事で詳しく解説しています。

本事例では、置換前に「(.*?),」という表現が繰り返し用いられます。
これは、「カンマが登場するまで、なんでもいいから0文字以上繰り返す」という意味です。

行頭の「^」と組み合わせることで、行頭から最初に登場したカンマまでを検索することができます。

そして「.*?」の箇所を「()」と丸カッコで囲むことで、検索に当てはまった箇所を置換後に呼び出すことができます。 上記の「^(.*?),」場合、カッコの中に入る当てはまる文字は以下の文字です。

つまり最初のカンマが登場するまでの文字です。

これを置換後において、「$1」と記述することで、当てはまった文字を呼び出すことができます。

置換後

$1

置換すると以下のような結果になります。

正規表現で丸カッコ「()」で囲まれた箇所が残り、丸カッコの外に記述していた「,」については削除されました。

つまり「78512,」を「78512」に置換することができました。

$1を「★」で囲んでみるともう少しわかりやすくなると思います。

置換後

★$1★

置換すると以下のような結果になります。

置換後に記述した「★」に囲まれて、置換前の「()」で囲まれた箇所($1)が出力されました。

キャプチャ2つ

次に「^(.*?),(.*?),」について考えてみましょう。

先ほどの正規表現の後ろにもう一つ「(.*?),」が付いたものになります。

これは、「行頭から最初のカンマが登場するまで、なんでもいいから0文字以上繰り返す。その後、次のカンマが登場するまで、何でもいいから0文字以上繰り返す

という意味になります。

ここだけで検索すると以下のような結果になります。

2つ目のカンマまでが検索に引っかかりました。

そして、2つ目の「()」丸カッコで囲まれた箇所はキャプチャされ、
「$2」と記述することで、置換後に呼び出すことができます。

正規表現の以下の箇所に、「()」丸カッコで囲まれた箇所が当てはまっています。

※補足「()」と正規表現のどこが当てはまっているかの対応。
$1, $2

キャプチャ4つ

上記の正規表現はCSVファイルの2つ目のカンマまでを取得するものですが、
以下のように4列分用意すれば、最初にお見せした正規表現になります。

置換前

^(.*?),(.*?),(.*?),(.*?)$

※末尾の「$」は行末の位置を意味します。

この正規表現で検索すると以下のような結果になります。

対応は以下のようになっています。

試しに、3列目⇒2列目⇒4列目⇒1列目の順に並べ替えてみます。

列の順番を入れ替えることができました。

このようにキャプチャを活用すれば、正規表現で引っかかった箇所を自由に取り出すことが可能になります。

前回の記事で解説した、フィールドの削除も可能になります。

まとめ

今回はCSVファイルの中から必要な列だけ取り出す方法について解説しました。
この方法を使用すれば、正規表現置換1回で何万行ものCSVファイルを一括で置換することが可能です。

プログラムを組む必要などはありません。
ぜひ有効活用してみてください。

正規表現についての別記事についてもご覧ください!

★検索
パスワードの正規表現の考え方
「~を含まない行」を検索する方法
「~を含む行」を検索する方法
「~で終わる」を検索する方法
「~で始まる」を検索する方法
正規表現繰り返しの考え方

最短一致検索を行う方法
否定の文字クラス
「または」検索を行う方法

環境による「\d」の動作の違いについて検証

★置換
正規表現置換の考え方
大文字⇔小文字変換を行う方法
キャメルケース⇔スネークケース変換を行う方法
CSVを囲みなし⇒囲みありに変換する方法

CSVファイルの特定のカンマ以降を削除する方法
CSVファイルの必要な箇所だけ残す方法
数字3ケタおきにカンマを挿入する方法
正規表現置換で不要な行を削除し、必要な行だけ残す方法
数字を0埋めする方法
0埋めされた数字を0埋めなしに変換する方法
ファイル名から、拡張子のみを抽出する方法
Javaで正規表現置換を行う方法

また、Udemyという動画教育プラットフォームで動画解説を行っております。
動きを確認しながら丁寧に学習したいという方は、ぜひご覧ください!

正規表現入門 作業効率アップに役立つ38個の方法

コメント

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