2016-04-15 20 views
0

Ich versuche, alle Platzhalter in einer Datei mit einem Muster @ {}. Ich versuche, alle Variablen zu bekommen, aber ich bin nicht in der Lage, das Muster für die Endklammer und auch das ganze Wort innerhalb zu definieren. Unten ist mein Code so weitAbrufen aller Platzhalter aus Datei mit Muster @ {} mit Powershell

$SampleText = "I need all the variables with @{abc} @{def} 
and @{xyz}" 
$Pattern = '@{\w*' 
$SampleText | Select-String -AllMatches -Pattern $Pattern 
| Select-Object -ExpandProperty Matches | Select-Object -ExpandProperty Value 

dies tun ich nur @ bin immer {abc, @ {def und @ {xyz als Ausgänge. Ich brauche das ganze @ {abc}, @ {def} und @ {xyz}. Ich habe versucht, das $ Muster mit vielen Variationen zu ändern und es hilft nicht

Irgendwelche Hilfe?

Antwort

1

Hier ist eine knappere Lösung (PSV3 +):

$SampleText | % { [regex]::Matches($_, '@\{\w+\}').Value } 

Beachten Sie, dass, auch wenn Sie weg, ohne \ bekommen -escaping { und } in Ihrem Spezifische Regex, sollten Sie dies im Allgemeinen tun, weil sie Metazeichen in Quantifizierern verwendet werden (z. B. {2}, um eine Wiederholungszahl von 2 anzugeben).

[regex] ist der Typentreiber von PowerShell für den Typ [System.Text.RegularExpressions.Match], der Funktionen bietet, die über den Operator der PowerShell -match hinausgehen.

In diesem Fall wird die statische Matches Methode gibt alle Spiele des angegebenen regulären Ausdrucks in der Eingabezeichenfolge, wie [System.Text.RegularExpressions.Match] Instanzen. Jede dieser Instanzen zeichnet die übereinstimmende Zeichenfolge in ihrer .Value-Eigenschaft auf, so dass auf die gesamte Sammlung von Übereinstimmungen angewendet wird (die vom Typ [System.Text.RegularExpressions.MatchCollection] ist). Die einzelnen Übereinstimmungen werden als Array von Zeichenfolgen zurückgegeben.

+1

Wow, das ist nur reines Gold. Ich danke dir sehr. Ich merke jetzt, dass ich mehr Optionen erforschen und üben muss. – VKarthik

+0

@VKarthik: Danke; Während PowerShell viele Funktionen auf hohem Niveau bietet, macht die Verwendung von .NET-Features die Dinge entweder einfacher oder ermöglicht Ihnen, Dinge zu tun, die Sie mit PowerShell nicht direkt ausführen können. Es ist ein Beweis für die Flexibilität von PowerShell, dass diese Option verfügbar ist. – mklement0

0

Aah, etwas mehr graben. Ich habe es herausgefunden. Das Muster muss angepasst werden, wie unten gezeigt -

$Pattern = '@{\w*}' 
Verwandte Themen