2016-06-16 223 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()