Maison >développement back-end >Tutoriel Python >Expression régulière Python【2】

Expression régulière Python【2】

黄舟
黄舟original
2017-02-04 17:12:181722parcourir

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

Expression régulière Python【2】

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.

Expression régulière Python【2】

Ensuite, écrivez une boucle For pour récupérer à nouveau l'interface et l'IP :

Expression régulière Python【2】

Effet de l'opération :

Expression régulière Python【2】

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


Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn