2016-04-27 17 views
0

Dies ist meine erste Post auf StackOverflow, und Regex ist neu für mich, bitte ertragen Sie mit mir.Regex - Passende Zeichen dann erfassen

Ich versuche, Felder in einem Powershell-Befehlsereignisprotokoll zu erfassen. Ich habe Text in folgendem Format:

(Get-AdUser): name="Identity"; value="Username" 

Ich möchte in der Klammer die Zeichenfolge erfassen Get-ADUser und auch den Wert Feld „username“ erfassen

Wenn möglich eine endgültige Ausgabe von

Get-AdUser Username 

wäre perfekt.

Das Problem ist, dass ich jeden Wert innerhalb der Klammer außer dem Wort "Out-Default" erfassen möchte. Out-Default ist die Ausgabe eines Befehls und nicht der Befehl selbst.

Bisher habe ich:

\((?!Out-Default)([^)]+)\) 

, die etwas in der Klammer mit Ausnahme von "Out-Default" ist passend.

Ich bin mir nicht sicher, wie ich es von hier aus angehen soll. Jeder Rat wird geschätzt.

Update - ist es möglich, nur 1 Capture-Gruppe zu verwenden, zu erfassen:

(Get-AdUser): name="Identity"; value="Username" 

und das Ergebnis anzeigen lassen wie

Get-AdUser name=Identity value=Username 

?

+0

Wie ungefähr \ ((?! Out-Default) ([^)] +) \). *; \ s + (\ w +) (? = \ = \ "Benutzername \") – Ashish

Antwort

2

Hoffnung diese Arbeit

\((?!Out-Default)([^)]+)\).*?value="([^"]+)" 

Regex demo

Erläuterung:
\: Escapes Sonderzeichen sample
(…): Capturing Gruppe sample
(?!…): Negative Look-Ahead-sample
[^x]: Ein Zeichen, das nicht x sample
+ ist: Ein oder mehr sample
.: Alle Zeichen außer Zeilenumbruch sample
*: Null oder mehrmals sample
?: Einmal oder keine sample

+0

Hallo, danke dafür. Es funktioniert, wenn alle Zeichen in derselben Zeile sind. Aber wie wäre es mit dem Szenario, wo Wert = "Benutzername" in einer separaten Zeile ist? – Shiftey