2016-12-09 2 views
1

Hallo, ich habe Probleme mit einem einfachen Ersetzungsbefehl in Powershell. Was ich suche zu tun ist, zu ersetzen „STRINGNO: ########“ (# ist nicht bekannt) auf „STRINGNO:“ Ich wurde mit etwas entlang der Linien vonPowershell ersetzen "string: stuff" zu "string"

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

aber das doesn arbeite nicht. Ich habe auch versucht,

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

'STRINGNO: *' ist ein regulärer Ausdruck, der 'STRINGNO' und dann eine beliebige Anzahl von': 'Zeichen entspricht. Sie wollten wahrscheinlich 'STRINGNO schreiben:. *' –

+1

Die ['-replace'] (https://msdn.microsoft.com/en-us/powershell/reference/5.1/microsoft.powershell.core/about/about_operators) Der Operator [regulärer Ausdruck] (https://msdn.microsoft.com/en-us/library/az24scfc%28v=vs.110%29.aspx) stimmt nicht mit [Wildcard] (https://msdn.microsoft.de) überein. com/de-us/library/aa717088.aspx) passend, also ist es '. *', nicht nur '*'. –

+1

Die Methode [System.String.Replace] (https://msdn.microsoft.com/en-us/library/fk49wtc1 (v = vs.110) .aspx) sucht nach einer Zeichenfolge, die genau die Zeichen enthält und ersetzt sie mit einem anderen Satz von Zeichen. Es gibt keine Unterstützung für den Mustervergleich. Wenn Sie einen Mustervergleich wünschen, verwenden Sie die Powershell -replace und reguläre Ausdrücke. – StephenP

Antwort

0

Zur Schließung dieser Frage mit einer idiomatischen Powershell-Lösung zu bringen:

> 'STRINGNO:#######' -replace '(STRINGNO:).*', '$1' 
STRINGNO: 
  • '(STRINGNO:).*' ein regulärer Ausdruck ist - das ist, was -replace erwartet als erstes Operand - der mit jeder Zeile übereinstimmt, die Literal STRINGNO: enthält - eingeschlossen in (...), um eine Erfassungsgruppe zu bilden - gefolgt von einer beliebigen Anzahl von Zeichen (.*) - mit anderen Worten: Es entspricht (Teil von) einer Zeichenfolge, die Literal STRINGNO: enthält, beginnend mit dieser Zeichenfolge, bis zum Ende der Zeile.

  • $1 dann ersetzt, was der regex abgestimmt - wenn es abgestimmt - mit dem, was der Regex‘ersten Capture-Gruppe ($1) abgestimmt - das ist STRINGNO: im Fall zur Hand.