2017-03-24 2 views
0

Ich habe die folgende Regex, die in Python gut funktioniert (aufgrund von Lookahead Assertions).Konvertieren einer Python-Lookahead-Assertion Regex in einen gültigen Golang

some_list = re.findall('^(?=Name:)(.*?)(?=USB\ Device\ Filters:)', myinput, re.MULTILINE|re.DOTALL)

Siehe Beispiel myinput im Codeblock unten.

Name: wird immer der Anfang einer Gruppe sein und USB Device Filter: immer das Ende einer Gruppe sein wird. Nicht alle Zeilen haben einen gültigen Schlüssel: Wert kann z. B. eine Leerzeile oder eine Leerzeile haben.

Name:   Server1 10.0.0.11 
Groups:  /
Guest OS:  Ubuntu (64-bit) 
\n 
<none> 
USB Device Filters: 

Name:   Server2 10.0.0.12 
Groups:  /
Guest OS:  Debian (64-bit) 
\n 
<none> 
USB Device Filters: 

Kann mir jemand helfen, dieses Golang Regex in einen gültigen Format konvertieren?

Das ultimative Ziel ist es, myinput zu analysieren und ein Stück übereinstimmende Gruppen zu erhalten.

Antwort

1

dies in Python Gegeben:

^(?=Name:)(.*?)(?=USB Device Filters:) 

Demo

^(?=Name:) Da eine Nullbreite Behauptung ist, Name: durch die einfangenden Gruppen erfasst wird es folgende.

Sie können das gleiche in Golang mit dieser erfassen:

^(Name:.*?)USB Device Filters: 

Demo

Wenn Sie wollen Name:\s nicht erfassen können Sie tun:

^Name:\s*(.*?)USB Device Filters: 

Demo

Sie müssen nicht th entkommen e Leerzeichen mit (?=USB\ Device\ Filters:) in jeder Sprache. Alle haben (?ms) Flags gesetzt.

+0

Dank @dawg. Das hat mich auf den richtigen Weg gebracht. Ich muss letzte Nacht ausgeblendet und die Flaggen vergessen haben. Dies funktionierte für mich am Ende ... '' 'regexp.MustCompile (' (? Ms)^(Name:. *?) USB Device Filter: ')' '' – mfridman

Verwandte Themen