csvファイルから正規表現のパターンにマッチした文字列を抽出するスクリプトを紹介します。
紹介するスクリプトをはChat GPTで生成しました。
言語は Power Shell を使用しています。
カレントディレクトリのinput.csvファイル内の文字列から、"/images/<任意のファイル名>.jpg"を検索して拡張子を含むファイル名を抽出します。
抽出した文字列はカレントディレクトリのoutput.csvに書き出されます。
# 検索対象ファイル $input_file = "input.csv" # マッチした文字列を書き出すファイル $output_file = "output.csv" # 正規表現パターン # JPEGファイル名を取得する(拡張子を含む) $pattern = "/images/([\w\-. ]+\.jpg)" # CSVファイルの読み込み $input_data = Get-Content $input_file # パターンにマッチしたすべてのキャプチャー部分を抽出して別のファイルに保存 $matches = $input_data | ForEach-Object { [regex]::Matches($_, $pattern) | ForEach-Object { $_.Groups[1].Value } } $matches | Out-File -FilePath $output_file
Power Shell のターミナルを開き、input.csvとoutput.csvがあるディレクトリに移動して、このスクリプトをターミナルにペーストして実行することで動かすことができます。
具体例
input.csv
column_name "29aopuうお/images/test0.jpg"moweて 同じセルにマッチパターンが複数出現 feうえお/images/test1.jpg oobけこ123/images/test2.jpgttt .jpg.jpgが連続するファイル名 23/images/second_test2.jpg.jpgtttowm000 かき/images/test2_-23.jpgくけこ123/images/123456.jpgtttowm000 -が含まれるファイル名 かき/images/1te-st5_5.jpgくけこ123/images/2024-05-01.jpgtttowm000 ファイル名に使えない文字列が含まれる "294kksoうお/images/tes*t:3_123.jpg"moweて
output.csv
test0.jpg test1.jpg test2.jpg second_test2.jpg.jpg test2_-23.jpg 123456.jpg 1te-st5_5.jpg 2024-05-01.jpg
test2.jpg.jpg のように.jpgが二回以上続くファイル名の場合はtest2.jpgも取り出せます。
また、同じセルに複数のマッチパターンが出現する場合はすべてのマッチパターンが抽出されます。
regex]::Matches($_, $pattern)
上記の部分ですべてのマッチパターンを取り出しています。
そして取り出したマッチパターンからキャプチャグループのみを取り出すために下記の処理を行っています。
ForEach-Object { $_.Groups[1].Value }
$_.Groups[0].Value にはマッチパターン全体の文字列が格納されており、$_.Groups[1].Value でパーターン内のキャプチャグループの一つ目が取り出せます。
今回はキャプチャグループは一つだけなので上記のスクリプトで取り出すことができます。