正則表達處理路徑 獲取檔名或副檔名
- 為了適應 Windows 和 Unix 類操作系統的路徑,使用了 [\/] 來匹配路徑分隔符,這樣可以同時匹配正斜杠(/)和反斜杠(\)。
- 正則表達式仍然可能在一些極端情況下失效,例如檔案名稱中含有正則表達式特殊字符等。
正則表達式
這邊用 PowerShell 當範例,打開之後直接貼上就能測試了。
範例路徑
$path = "C:\Users\Username\Documents\example.txt"
$path = "C:\Users\Username\Documents\.git\example"
$path = "C:\Users\Username\Documents\.git\example.fix.txt"
$path = "C:\Users\Username\Documents\.git\.gitignore"
這邊多給兩個比較機車的情況當測試樣本。
檔案名稱
# 使用 -replace 運算符和正則表達式來獲取檔案名稱
$filenameWithoutExtension = $path -replace '^(.*[\\/])([^\\/]+?)(\.[^\\/.]+)?$', '$2'
完整檔案名稱
# 使用 -replace 運算符和正則表達式來獲取檔名(包含副檔名)
$filenameWithExtension = $path -replace '^(.*[\\/])'
副檔名
# 使用 -replace 運算符和正則表達式來獲取副檔名
$extension = $path -replace '^.*[/\\][^/\\]*?(\.[^/\\.]*)?$','$1'
$extension = ($path -replace '^.*[/\\]([^/\\]*)$', '$1') -replace '^.*?\.([^.]*)$|^.*$', '$1'
父資料夾名
# 使用 -replace 運算符和正則表達式來獲取父資料夾名稱
$parentFolderName = $path -replace '^(.*[\\/])?([^\\/]*)[\\/]([^\\/]+)$', '$2'
檔案所在路徑
# 使用 -replace 運算符和正則表達式來獲取檔案所在路徑
$filePath = $path -replace '[\\/]([^\\/]*)$'
在 PowerShell 中其實有提供以上需求的C#函式,如果不是舊版沒支援建議是直接用內建函式比較妥,至少有保證不會出事。
沒有留言:
張貼留言