2016-05-19 12 views
0

ich ein Python-Skript schreibe und möchten alle Namen Gruppenobjekt aus einer großen Datei entsprechen, ein Beispiel für die Rohdaten, wie unten:Regulärer Ausdruck zurückzukehren, das Wort vor einem String - Python

IT_PC (Group) -Host: 192.168.103.144 -Host: 192.168.103.145 -Network: 192.168.103.0 255.255.255.0 HR_PC (Group) -Host: 192.168.65.145 -Host: 192.168.62.146 -Host: 192.168.62.154 
Finance_PC (Group) -Finance_PC_192.168.41.125 
Testing_PC (Group) -Host: 192.168.129.1 -Host: 192.168.129.97 -Host: 192.168.59.81 -Host: 192.168.59.82 

Meine erforderliche Ausgabe wird wie folgt sein:

IT_PC (Group) 
HR_PC (Group) 
Finance_PC (Group) 
Testing_PC (Group) 

ich unter regulären Eil zu verwenden versuchen mein gewünschtes Ergebnis passen, aber es nur den ersten zurück, [ ‚IT_PC (Group)‘]. Gibt es einen Rat für mich, danke?

source = "IT_PC (Group) -Host: 192.168.103.144 -Host: 192.168.103.145 -Network: 192.168.103.0 255.255.255.0 HR_PC (Group) -Host: 192.168.65.145 -Host: 192.168.62.146 -Host: 192.168.62.154 Finance_PC (Group) -Finance_PC_192.168.41.125 Testing_PC (Group) -Host: 192.168.129.1 -Host: 192.168.129.97 -Host: 192.168.59.81 -Host: 192.168.59.82" 

data = ".*? (?= \(group\))" 
a = re.findall(data, source) 
print a 

Antwort

1

würde ich den \w+(?= \(Group\)) Ausdruck benutzen, die Zeichen ein oder mehr alphanumerische entsprechen würde (A-Za-z0-9_) gefolgt von einem Leerzeichen und ein (Group):

>>> re.findall(r"\w+(?= \(Group\))", source) 
['IT_PC', 'HR_PC', 'Finance_PC', 'Testing_PC'] 

Oder Sie werden noch spezifischere über das Gruppenobjektnamenformat und erfordern einen oder mehrere Großbuchstaben nach dem Unterstrich:

>>> re.findall(r"\w+_[A-Z]+(?= \(Group\))", source) 
['IT_PC', 'HR_PC', 'Finance_PC', 'Testing_PC'] 

Oder, wenn Sie Group auch benötigen:

>>> re.findall(r"\w+ \(Group\)", source) 
['IT_PC (Group)', 'HR_PC (Group)', 'Finance_PC (Group)', 'Testing_PC (Group)'] 
>>> re.findall(r"\w+_[A-Z]+ \(Group\)", source) 
['IT_PC (Group)', 'HR_PC (Group)', 'Finance_PC (Group)', 'Testing_PC (Group)'] 
+0

Dank alecxe, wie könnte ich die Zeichenfolge "(Group)" als auch zurück. So. ['IT_PC (Gruppe)', 'HR_PC (Gruppe)', 'Finance_PC (Gruppe)', 'Testing_PC (Gruppe)'] – kafter2

+0

@ kafter2 sicher, aktualisiert die Antwort. Ich hoffe, das hilft. – alecxe

+0

Ja, es hilft. Vielen Dank für Ihre schnelle Antwort ;) – kafter2