2016-06-16 251 views
3

我有一個變量之前替換字符串中的字符,具有下列字符串值:文件擴展名

PS C:\> $sql.physicalname 
I:\Data\Data1.mdf 
I:\Data\Data2.ndf 
I:\Data\Data3.ndf 
I:\Data\Data4.ndf 
I:\Data\Data5.ndf 
I:\Data\Data6.ndf 
I:\Data\Data7.ndf 
I:\Data\Data8.ndf 
I:\Data\Data9.ndf 
I:\Data\log.ldf 

我想是更換/修剪字符串,以便只有.MDF/.NDF/.LDF的擴展仍然存在:

.mdf 
.ndf 
.ndf 
.ndf 
.ndf 
.ndf 
.ndf 
.ndf 
.ndf 
.ldf 

我嘗試使用-replace參數與*通配符,但我不能換我的頭周圍。

回答

3

因爲這是一個正則表達式,所以您將其傳遞給-replace,嘗試與

-replace ".*\.", "." 

更好,更可靠的方法是使用類似的東西

$sql.physicalname | % { [System.IO.Path]::GetExtension($_) } 
+0

工程就像一個魅力,仍然無法弄清楚爲什麼你的代碼工作雖然。你能詳細說明一下嗎? – MrPowerUser

+2

'。'在正則表達式中基本上匹配任何字符,'*'表示0次或更多次出現。如果你想匹配'。'本身必須用反斜槓將其轉義,因此'。* \'。意味着匹配從字符串開頭到第一個'。'的所有字符。遇到 - '。'包括在內。下面的鏈接到MSDN與更多信息有關.NET正則表達式https://msdn.microsoft.com/en-us/library/hs600312(v=vs.110).aspx – DAXaholic

+0

非常清楚,謝謝! – MrPowerUser

1

您可以使用:[System.IO.Path]::GetExtension()