正規表現で後方から最短一致で文字列を取り出す方法について。(Python3で書いているので参考にする場合は各言語の仕様に応じて書き換えてください。)
・想定されるシチュエーション
ファイルのパスから、ファイル名だけを取り出したい。
例えば、minecraft/sounds/records/mellohi.ogg
というパスから、mellohi.ogg
だけを取り出したいとする。
ところが、愚直に最短一致を使って
pattern=r"/(.*?)$"
とやっても、結果は sounds/records/mellohi.ogg
となって先頭の /
からの最短一致の結果しか返ってこない。
・結論
こうすればいい。
pattern=r".*/(.*?)$"
結果はちゃんと mellohi.ogg
になる。
後方から最短一致が欲しいということは、不要な部分を前方から最長でマッチさせればよいので、先頭に .*
を加えている。
あるいは、今回の場合においてはパス区切りの /
が含まれないように
pattern=r"/([^/]*?)$"
とするのも良いと思う。
Regex便利すぎて禿げる。
【Regex】後方からの最短一致