Wie extrahieren Sie den Wert einer Regex-Rückreferenz / Übereinstimmung in Powershell?
Ich habe eine Textdatei mit Zeilen von Daten. Ich kann verwenden Sie das folgende powershell-Skript zum extrahieren der Zeilen, die ich bin interessiert in:
select-string -path *.txt -pattern "subject=([A-Z\.]+),"
Einige Beispiel-Daten:
blah blah subject=THIS.IS.TEST.DATA, blah blah blah
Was ich möchte, ist das extrahieren nur den eigentlichen Inhalt des Themas (d.h. die".IST.TEST.DATA" - string). Ich versuchte dies:
select-string -path *.txt -pattern "subject=([A-Z\.]+)," | %{ $_.Matches[0] }
Aber die "Spiele" - Eigenschaft immer den Wert null. Was mache ich falsch?
InformationsquelleAutor der Frage d4nt | 2009-03-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich weiß nicht, warum deine version nicht funktioniert. Es sollte funktionieren. Hier ist eine hässlichere version, die funktioniert.
Bearbeiten. Erklärung für dant:
-match
ist eine regular expression matching-operator:Den
> $null
nur unterdrückt die Wahren seins ausgegeben. (Versuchen Sie, es zu entfernen.) Es ist ein cmdlet, das das gleiche Ding, dessen Namen ich mich nicht erinnern im moment.$matches
ist eine Magische variable, enthält das Ergebnis der letzten-match
Betrieb.InformationsquelleAutor der Antwort dan-gph
In der PowerShell V2 CTP3, die Matches-Eigenschaft implementiert ist. So werden die folgenden arbeiten:
InformationsquelleAutor der Antwort Philippe
Das problem mit dem code, den Sie eingeben, ist, dass die select-string nicht übergeben unten die eigentliche Regex-Objekt. Stattdessen führt eine andere Klasse namens MatchInfo, die nicht die eigentliche regex-übereinstimmungen Informationen.
Wenn Sie nur wollen, zum ausführen der regex wird, sobald Sie Rollen sind Sie eigene Funktion, die ist nicht allzu schwer.
InformationsquelleAutor der Antwort JaredPar
Noch eine andere option
InformationsquelleAutor der Antwort Shay Levy
Haben viel gelernt von all den anderen Antworten, die ich war in der Lage zu bekommen, was ich will mit die folgende Zeile:
Dieser fühlte sich gut an, wie ich lief nur den regex einmal pro Zeile, und als ich betreten wurde dies an der Eingabeaufforderung es war schön, nicht zu haben, mehrere code-Zeilen.
InformationsquelleAutor der Antwort d4nt
Sehen diese Hinweise auf Regulären Ausdrücken in PowerShell
InformationsquelleAutor der Antwort John D. Cook
Den Select-String-Befehl scheint, um wieder eine MatchInfo variable und nicht um eine "string" - variable.
Ich verbrachte mehrere Stunden finden auf Foren und offizielle website mit kein Glück.
Ich bin noch am sammeln von Infos.
Ein Weg, um dies zu erklären explizit eine string-variable, um das Ergebnis aus der Select-String, aus deinem Beispiel:
[string] $foo = " select-string -path *.txt -Muster "Thema=([A-Z.]+),"
$Foo-variable ist nun ein string ist und nicht ein MatchInfo-Objekt.
Hoffe, das hilft.
ps5 powershell-version 5-Saiter-Saiten manipulation
InformationsquelleAutor der Antwort freddymio
Andere Variante, passende 7 Ziffern in einem string
gibt: 1234567
InformationsquelleAutor der Antwort Jeff K.