PR

正規表現を使ってファイルパスからフォルダパスを取得する方法

プログラミング
・ファイルパス(フルパス/絶対パス)からファイル名を削除し、フォルダパス(ディレクトリパス)を取得したい。
・開きたいファイルが格納されているフォルダをすぐ開けるように、フォルダパスの一覧表を作成したい。

上記の悩みを抱える方に、正規表現を用いた文字列置換による方法をお教えします。
サクラエディタなどの正規表現を用いた置換に対応したテキストエディタがあれば実施できます。

本記事の方法を実施すれば、ほんの数秒でファイルパスからファイル名を削除して、フォルダパスのみを取得することができます。

よければ参考にしてみてください。

 

サクラエディタで正規表現を用いた文字列置換により ファイルパスの一覧からファイル名を削除してフォルダパスを取得する方法

使用したもの
・サクラエディタ

 

実施手順

1. サクラエディタでファイルパスの一覧が記載されているテキストファイルを開く。

 

2. メニューバーの「検索」をクリックし、表示されたメニューから「置換」をクリックする(「Ctrl」キー + 「R」キー でも可)。

 

3. 表示された「置換」ダイアログの内容を下記のように設定にし、「すべて置換」ボタンをクリックする。

・正規表現:チェックボックスにチェックを付ける
・置換前:フォルダパスの末尾のバックスラッシュ「\」を消したい場合は「\\[^\\]+$」、残したい場合は「[^\\]+$」と入力する。
(環境によってはバックスラッシュ「\」が、円マーク「\」で表示されます。)
・置換後:何も入力せず空欄にする。
・置換対象:「選択文字」を選択する。
・範囲:「ファイル全体」を選択する。

 

4. ファイルパスからファイル名が削除され、フォルダパスが残される。

■置換前の文字列に「\\[^\\]+$」と入力した場合(※末尾のバックスラッシュを削除する)

 

■置換前の文字列に「[^\\]+$」と入力した場合(※末尾のバックスラッシュを残す)

 

以上です。
みなさんいかがでしたか?とても簡単に実施できましたよね?

 

正規表現を用いた文字列置換の詳細説明

手順3で置換前の入力ボックスに「\\[^\\]+$」と入力しましたが、ここで正規表現を用いています。
正規表現で用いられる、特殊な意味を持つ文字や記号のことをメタ文字といいます。
今回は以下の5つのメタ文字を使いました。

・バックスラッシュ「\」(または円マーク「\」)
・角括弧(大括弧)「[]」
・キャレット(サーカムフレックス/ハット記号)「^」
・プラス「+」
・ドルマーク「$」

1, 2文字目の2個連続したバックスラッシュ「\\は、1個のバックスラッシュ文字「\を表します(5, 6文字目も同様)。
バックスラッシュは、その直後の特殊な意味を持つメタ文字を無効化(エスケープ)し、普通の文字として認識されるようにはたらきます。
つまり、1文字目のバックスラッシュは、2文字目のバックスラッシュがメタ文字ではなく、普通の「バックスラッシュ文字」として認識されるようにします(5, 6文字目も同様)。

3, 7文字目の角括弧「[]」は、「角括弧内に指定したいずれかの文字」を表します。
例えば、「[abc]」と書けば、「a」「b」「c」のいずれかの1文字ということになります。
そして、4文字目のキャレット「^」は、角括弧「[]」の先頭で使うと、「角括弧内に指定したいずれでもない文字」を表します。
例えば、「[^abc]」と書けば、「a」「b」「c」以外の1文字ということになります。
つまり、3~7文字目の「[^\\]」は、「バックスラッシュ「\」以外の1文字」を表します。

※キャレット「^」は、角括弧の先頭で使うと「行頭」を意味します。使う場所の違いにより意味が変わるのでご注意を!

 

8文字目のプラス「+」は、「直前の文字の1個以上の繰り返し」を意味します。
つまり、3~8文字目の「[^\\]+」は、「バックスラッシュ「\」以外の文字が1個以上つながった文字列」ということになります。

末尾9文字目のドルマーク「$」は、「行末」を意味します。

以上をまとめると、「\\[^\\]+$」に一致する文字列は、「対象行の一番最後に存在するバックスラッシュ「\」から行末までの文字列」になります。

つまり、下図の黄色で示した「ファイルパスの一番最後にあるバックスラッシュとファイル名」が、置換後に空欄になる、すなわち削除されます。


 

ここまで読んだくださってありがとうございました。
本記事の内容が、みなさんのお仕事(業務)のお役に立てるものだったらうれしいです。
今後も引き続き有益な情報を発信できるように頑張ります。




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