Heim >Backend-Entwicklung >Python-Tutorial >Regulärer Python-Ausdruck[2]

Regulärer Python-Ausdruck[2]

黄舟
黄舟Original
2017-02-04 17:12:181717Durchsuche

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.)

Regulärer Python-Ausdruck[2]

Ü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.

Regulärer Python-Ausdruck[2]

Als nächstes schreiben Sie eine For-Schleife, um die Schnittstelle und die IP erneut zu erfassen:

Regulärer Python-Ausdruck[2]

Operationseffekt:

Regulärer Python-Ausdruck[2]

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)!


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn