Maison > Article > développement back-end > Expression régulière Python【2】
Dans la continuité du contenu d’hier, passons directement à la pratique aujourd’hui. Les expressions régulières étant très puissantes et complexes, veuillez consulter la documentation pertinente pour les parties de cette expérience qui dépassent la portée de ce que vous avez appris la dernière fois. Ce didacticiel est uniquement destiné à aider les ingénieurs d'exploitation et de maintenance à démarrer rapidement. Si je ne le comprends pas, vous pouvez également l'utiliser comme outil de remplacement direct.
Vérifiez les expressions régulières dans les scripts d'inspection automatique Telnet et SSH : DeviceName = re.search('.*(?=#show run)',telreply).group(), telreply est le contenu de l'inspection, alors vous pouvez le voir au début du journal :
R1>enable Password: R1#terminal length 0 R1#show run Building configuration...
Évidemment, cette expression régulière doit correspondre à '# show' N'importe quel caractère avant (sauf nouvelle ligne), alors bien sûr c'est R1.
Faites une expérience plus compliquée et interceptez plus de fragments de configuration. Par exemple, la configuration suivante nécessite de trouver l'adresse IP de chaque interface de cet appareil :
############################ ! 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 ! ############################
Attribuez-la dans le journal : (L'environnement réel est de lire directement le journal du journal)
log = ''' #Voici trois guillemets, puis appuyez sur Entrée pour coller la configuration ci-dessus, puis appuyez sur Entrée trois guillemets et appuyez sur Entrée. (Trois guillemets peuvent être utilisés pour coller des chaînes multilignes).
Vérifiez maintenant le journal :
>>> 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' >>>
Vous pouvez constater que les chaînes sont toutes sur une seule ligne et que le saut de ligne est en fait 'n' . Si vous utilisez print(log ), alors l'effet d'affichage sera le même que ci-dessus avec des sauts de ligne.
Vous pouvez également constater que la configuration des équipements Cisco est séparée par des points d'exclamation (!). Le début de chaque interface est 'interface', et l'adresse IP est précédée de 'ip'. adresse'. Il n'est donc pas difficile d'imaginer qu'il y ait 'interface(.*)n' dans l'expression régulière, qui correspond à la première ligne d'une certaine configuration d'interface. La configuration se termine par '!', donc l'expression avant '!' nécessite '(?=!)'. Le nombre de lignes dans la configuration du milieu est variable. Ce qui est sûr, c'est qu'il y a au moins une ligne de configuration et qu'il y aura un caractère de nouvelle ligne, c'est-à-dire '(.*n) ?)'. '?' signifie ici une correspondance non gourmande de l'expression précédente (.*n) une ou plusieurs fois. Les parenthèses peuvent obtenir l'effet de capture, mais si vous souhaitez désactiver l'effet de capture, suivez simplement le crochet de gauche avec un ?:. Cette expérience consiste à faire correspondre toutes les chaînes, donc « re.findall() » est utilisé. Plus d'explication, il suffit d'aller dans le 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')]
Le résultat est que la configuration de chaque interface est divisée en tuples de nom d'interface et de configuration, imbriqués dans une liste.
Ensuite, écrivez une boucle For pour récupérer à nouveau l'interface et l'IP :
Effet de l'opération :
Test terminé ! L'objectif d'obtenir l'adresse IP de chaque interface est atteint.
Maintenant que vous avez appris cette méthode, vous pouvez l'utiliser pour surveiller la configuration ou l'état de l'appareil à l'avenir. Par exemple, si l'état de l'interface est à l'origine « UP », s'il devient « DOWN ». , il vous enverra un e-mail pour vous en informer.
Ce qui précède est le contenu de l'expression régulière Python [2]. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php.cn) !