2017-12-26 18 views
3

Ich lerne gerade Regex mit autohotkey, aber kann nicht herausfinden, wie bestimmte Zeichenfolge extrahieren und in einer Variablen speichern?Autohotkey extrahieren Text mit Regex

Textzeile Ich bin die Suche: T NW CO NORWALK HUB NW 201-DS3-WLFRCTAICM5-NRWLCT02K16 [DS3 LEC] -1 -1 PSTN

ich zu retten versuchen, NW 201-DS3- WLFRCTAICM5-NRWLCT02K16 [DS3 LEC] NUR.

Hier ist mein Regex-Code: NW \ D \ d. DS3.]

Aber wie kann ich das als Variable in autohotkey speichern?

Ich habe RegexMatch versucht, aber das zeigt nur die Position. Ich mache etwas falsch.

+1

'RegExMatch (str, "NW \ D \ d. * DS3. * \]", Streichhölzer)', dann 'treffer [0]' wird das Spiel enthalten. –

Antwort

1

Sie können das dritte Argument liefern, die das Spiel Array halten wird:

RegExMatch(str,"NW\D\d.*DS3.*\]",matches) 

Dann matches[0] wird das Spiel enthalten.

Wenn Sie innerhalb des Musters einfangende Gruppen verwenden, können Sie auf deren Werte zugreifen, indem Sie weitere Indizes verwenden. Wenn Sie "NW\D(\d.*DS3.*)\]" gegen "NW 5xxx DS3 yyy] verwenden, haben Sie die gesamte Zeichenfolge innerhalb matches[0] und matches[1] wird 5xxx DS3 yyy halten.

See AHK RegExMatch docs:

FoundPos := RegExMatch(Haystack, NeedleRegEx [, UnquotedOutputVar = "", StartingPosition = 1])

UnquotedOutputVar Modus 1 (Standard):OutputVar ist der nicht notierten Namen einer Variablen, in dem das Teil Heuhaufen speichern das entsprach dem gesamten Muster. Wenn das Muster nicht gefunden wird (dh wenn die Funktion 0 zurückgibt), wird diese Variable und alle folgenden Array-Elemente leer gelassen.

Wenn eine capturing subpatterns vorhanden sind innerhalb NeedleRegEx, ihre Spiele in einer pseudo-array deren Basisnamen gespeichert sind, ist OutputVar. Wenn der Name der Variablen beispielsweise Match lautet, wird der Teilstring, der mit dem ersten Teilmuster übereinstimmt, in Match1 gespeichert, der zweite würde in Match2 gespeichert und so weiter. Die Ausnahme davon ist named subpatterns: Sie sind nach Namen statt nach Nummer gespeichert. Beispielsweise würde die Teilzeichenfolge, die mit dem benannten Untermuster "(?P<Year>\d{4})" übereinstimmt, in MatchYear gespeichert. Wenn ein bestimmtes Untermuster nicht übereinstimmt (oder wenn die Funktion null zurückgibt), wird die entsprechende Variable leer gelassen.

+1

Danke! Das macht viel mehr Sinn, wie du es erklärt hast. –

1
; If you want to delete ALL .... 

Only(ByRef C) 
{ 

/* 
RegExReplace 
https://autohotkey.com/docs/commands/RegExReplace.htm 
*/ 

; NW 201-DS3-WLFRCTAICM5-NRWLCT02K16 [DS3 LEC] 

C:=RegExReplace(C, "NW\s[\w-]+\s\[[\w\s]+\]","",ReplacementCount,-1) 

if (ReplacementCount = 0) 
return C 
else 
return Only(C) 

} ; Only(ByRef C) 

string:="Line of text I am searching: T NW CO NORWALK HUB NW 201-DS3-WLFRCTAICM5-NRWLCT02K16 [DS3 LEC] -1 -1 PSTN" 

Result:=Only(string) 
MsgBox, % Result 
MsgBox, % Only(string)