我想提取 file1, file2 我知道如何在 javascript 中執行此操作,我迷失在 Powershell 中,我只能在 tut https://devblogs.microsoft.com/scripting/regular-expressions之后提取整個第二個匹配項- regex-grouping-regex/,語法是什么?
$regex = '(. \\)*(. )\.(. )$'
$data = @'
"C:\test\file1.txt"
"C:\test\file2.txt"
'@
[RegEx]::Matches($data,$regex).value
uj5u.com熱心網友回復:
以下是您如何使用呼叫來做到這一點Regex.Matches:
$data = @'
"C:\test\file1.txt"
"C:\test\file2.txt"
'@
$regex = [regex] '(. \\)*(?<base>. )\.(. )'
$regex.Matches($data).ForEach{ $_.Groups['base'] }.Value
# Results in:
# file1
# file2
但是,由于您正在處理路徑,因此我個人建議您使用FileInfo類來決議它們。在此示例中,我們可以使用String.Trim(Char)方法從每個路徑中洗掉前導和尾隨,并使用 型別運算子將字串安全地轉換為實體。"-asSystem.IO.FileInfo
$data = (@'
"C:\test\file1.txt"
"C:\test\file2.txt"
'@ -split '\r?\n').Trim('"') -as [IO.FileInfo[]]
$data.BaseName
uj5u.com熱心網友回復:
使用-match和$matches自動變數檢索捕獲組值的示例:
$data = @'
"C:\test\file1.txt"
"C:\test\file2.txt"
'@
$data -match '\\([^.\\] )\.[\s\S] ?\\([^.\\] )\.'
write-host $matches[1] # file1
write-host $matches[2] # file2
uj5u.com熱心網友回復:
為了完整起見,另一個 RegEx 解決方案:
$data = @'
"C:\te.st\file1.txt"
"C:/test/file2.foo.txt"
'@
[regex]::Matches($data, '[^\\/] (?=\.[^\\/] \")').Value
輸出:
file1
file2.foo
RegEx 使用積極的前瞻 (?=)來斷言擴展遵循,而不捕獲它。
regex101中的詳細說明。
我仍然認為該FileInfo解決方案更強大且更易于維護。我花了更長的時間來獲得正確的 RegEx,而不是簡單地拆分和轉換FileInfo。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/479349.html
標籤:电源外壳
