2023年4月29日 星期六

正則表達處理路徑 獲取檔名或副檔名

正則表達處理路徑 獲取檔名或副檔名

  1. 為了適應 Windows 和 Unix 類操作系統的路徑,使用了 [\/] 來匹配路徑分隔符,這樣可以同時匹配正斜杠(/)和反斜杠(\)。
  2. 正則表達式仍然可能在一些極端情況下失效,例如檔案名稱中含有正則表達式特殊字符等。



正則表達式

這邊用 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#函式,如果不是舊版沒支援建議是直接用內建函式比較妥,至少有保證不會出事。



沒有留言:

張貼留言