2
$文件使用正則表達式第一次出現分裂是一個文件名如何在PowerShell中
($List = gci $path | select -expandproperty Name
,然後我會通過$列表中的每個文件$循環。)
我想以後NAME1採取分開並操縱它,但是我的代碼在name1中給了我name2的一部分。
我使用-
(空格破折號空格)作爲name1和name2的分隔符,但是在某些情況下,name2包含一個額外的-
(空格破折號空格)。
下面是我在做什麼:
PS D:\> $File="foo - bar - bar2.ext"
[regex]$testreg = "(?<name1>.*)\s-\s(?<name2>.*)\.(?<ext>\w+$)"
$m = $testreg.Match($File)
$m.Groups["name1"].value
$m.Groups["name2"].value
$m.Groups["ext"].value
foo - bar
bar2
ext
我希望它給我:
foo
bar - bar2
ext
這樣我可以在以後操作foo和使用結果來重命名文件。
感謝。我曾嘗試在分隔符上使用非貪婪,比如'(\ s- \ s)?',但我沒有想到將它放入組中。 在這種情況下,'name1'和'name2'包含空格,所以非貪婪量詞就是答案。 – Xalorous
@Xalorous:我很高興聽到它的工作。請注意,'_'_by本身_就意味着_optional_,它與非貪婪不同:作爲非貪婪修飾符,'?'修飾其他量詞,即'*'或'+'。 – mklement0
所以,用我自己的話來重新解釋它,並測試理解:如果量詞是「+」或「*'」,那麼「??」修飾語會告訴它在第一次匹配時停止增加匹配修改組和下一組。沒有它會增加比賽直到它不能增加更多。非貪婪和貪婪? – Xalorous