2016-12-09 177 views
1

嗨,我在使用Powershell中的簡單替換命令時遇到問題。我所希望做的是,以取代「STRINGNO:########」(#不知道),以「STRINGNO:」我是利用沿Powershell將「字符串:東西」替換爲「字符串」

$a="STRINGNO:#######" 
$a.replace("STRINGNO:*", "STRINGNO:") 

但沒有按線的東西沒有工作。我也試着

$a -replace 'STRINGNO:*', 'STRINGNO:' 
+3

'STRINGNO:*'是一個正則表達式,它匹配'STRINGNO'和一個任意數量的':'字符。您可能打算編寫'STRINGNO:*' –

+1

['-replace'](https://msdn.microsoft.com/en-us/powershell/reference/5.1/microsoft.powershell.core/about/about_operators)運算符沒有[正則表達式](https://msdn.microsoft.com/en-us/library/az24scfc%28v=vs.110%29.aspx)匹配,而不是[通配符](https://msdn.microsoft。 com/en-us/library/aa717088.aspx)匹配,所以它是'。*',而不僅僅是'*'。 –

+1

您使用的[System.String.Replace](https://msdn.microsoft.com/en-us/library/fk49wtc1(v = vs.110).aspx)方法查找包含確切字符的字符串,並替換他們與另一組字符。不支持模式匹配。如果你想要模式匹配使用powershell -replace和正則表達式。 – StephenP

回答

0

帶來結束對這個問題有一個慣用的PowerShell的解決方案:

> 'STRINGNO:#######' -replace '(STRINGNO:).*', '$1' 
STRINGNO: 
  • '(STRINGNO:).*'正則表達式 - 這正是-replace預計其第一操作數 - 匹配任何包含在文字STRINGNO:中的行 - 包含在(...)中以形成捕獲組 - 後跟任意數量的字符(.*) - 換句話說:它匹配(包含)文字STRINGNO:的字符串(部分),從該字符串開始,到行的末尾。

  • $1然後替換什麼正則表達式匹配 - 如果它匹配 - 什麼正則表達式」第一捕獲組($1)匹配 - 這是在手邊的情況下STRINGNO: