Heim >Backend-Entwicklung >Python-Tutorial >Regulärer Python-Ausdruck[2]
Fortsetzung des gestrigen Inhalts und heute direkt in die Praxis. Da reguläre Ausdrücke sehr leistungsfähig und komplex sind, konsultieren Sie bitte die entsprechende Dokumentation für die Teile in diesem Experiment, die über den Rahmen dessen hinausgehen, was Sie beim letzten Mal gelernt haben. Dieses Tutorial dient nur dazu, den Betriebs- und Wartungsingenieuren den schnellen Einstieg zu erleichtern. Wenn Sie es nicht verstehen, können Sie es auch als direktes Ersatzwerkzeug verwenden.
Überprüfen Sie die regulären Ausdrücke in den automatischen Inspektionsskripten von Telnet und SSH: DeviceName = re.search('.*(?=#show run)',telreply).group(), telreply ist der Inhalt der Inspektion, dann können Sie ihn am Anfang des Protokolls sehen:
R1>enable Password: R1#terminal length 0 R1#show run Building configuration...
Offensichtlich muss dieser reguläre Ausdruck mit '# show' Beliebiges Zeichen davor (außer Newline), dann ist es natürlich R1.
Führen Sie ein komplizierteres Experiment durch und fangen Sie weitere Konfigurationsfragmente ab. Die folgende Konfiguration erfordert beispielsweise das Ermitteln der IP-Adresse jeder Schnittstelle dieses Geräts:
############################ ! interface FastEthernet0/0 ip address 192.168.1.200 255.255.255.0 duplex half ! interface GigabitEthernet1/0 no ip address shutdown negotiation auto ! interface Serial2/0 ip address 192.168.2.200 255.255.255.0 ! ############################
Zuweisen im Protokoll: (Die reale Umgebung besteht darin, das Protokollprotokoll direkt zu lesen)
log = ''' #Hier sind drei Anführungszeichen. Drücken Sie dann die Eingabetaste, um die obige Konfiguration einzufügen. Drücken Sie dann die Eingabetaste, drei Anführungszeichen und drücken Sie die Eingabetaste. (Zum Einfügen mehrzeiliger Zeichenfolgen können drei Anführungszeichen verwendet werden.)
Überprüfen Sie nun das Protokoll:
>>> log '\n!\ninterface FastEthernet0/0\n ip address 192.168.1.200 255.255.255.0\n duplex half\n!\ninterface GigabitEthernet1/0\n no ip address\n shutdown\n negotiation auto\n!\ninterface Serial2/0\n ip address 192.168.2.200 255.255.255.0\n!\n' >>>
Sie können feststellen, dass sich die Zeichenfolgen alle in einer Zeile befinden und der Zeilenumbruch tatsächlich „n“ ist. . Wenn Sie print(log) verwenden, ist der Anzeigeeffekt derselbe wie oben mit Zeilenumbrüchen.
Sie können auch feststellen, dass die Konfiguration von Cisco-Geräten durch Ausrufezeichen (!) getrennt ist. Der Anfang jeder Schnittstelle ist „Schnittstelle“ und der IP-Adresse steht „IP“. Adresse'. Daher ist es nicht schwer, sich vorzustellen, dass der reguläre Ausdruck „interface(.*)n“ enthält, das mit der ersten Zeile einer bestimmten Schnittstellenkonfiguration übereinstimmt. Die Konfiguration endet mit „!“, daher erfordert der Ausdruck vor „!“ „(?=!)“. Die Anzahl der Zeilen in der mittleren Konfiguration ist variabel. Sicher ist, dass es mindestens eine Konfigurationszeile gibt und ein Zeilenumbruchzeichen vorhanden ist, also „(.*n)+?)“. „+?“ bedeutet hier nicht gierige Übereinstimmung des vorherigen Ausdrucks (.*n) einmal oder mehrmals. Klammern können den Capture-Effekt erzielen, aber wenn Sie den Capture-Effekt deaktivieren möchten, folgen Sie einfach der linken Klammer mit einem ?:. Bei diesem Experiment sollen alle Zeichenfolgen abgeglichen werden, daher wird „re.findall()“ verwendet. Keine weitere Erklärung, gehen Sie einfach zum Code:
ljds = re.findall('interface(.*)\n((?:.*\n)+?)(?=!)',log) >>> ljds [(' FastEthernet0/0', ' ip address 192.168.1.200 255.255.255.0\n duplex half\n'), (' GigabitEthernet1/0', ' no ip address\n shutdown\n negotiation auto\n'), (' Serial2/0', ' ip address 192.168.2.200 255.255.255.0\n')]
Das Ergebnis ist, dass die Konfiguration jeder Schnittstelle in Tupel aus Schnittstellenname + Konfiguration unterteilt ist, die in einer Liste verschachtelt sind.
Als nächstes schreiben Sie eine For-Schleife, um die Schnittstelle und die IP erneut zu erfassen:
Operationseffekt:
Test abgeschlossen! Der Zweck, die IP-Adresse jeder Schnittstelle zu erhalten, wird erreicht.
Da Sie diese Methode nun erlernt haben, können Sie damit in Zukunft die Konfiguration oder den Status des Geräts überwachen. Wenn der Schnittstellenstatus beispielsweise ursprünglich „UP“ ist, wird er zu „DOWN“. , wird Ihnen eine E-Mail zur Benachrichtigung gesendet.
Das Obige ist der Inhalt des regulären Python-Ausdrucks [2]. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!