>백엔드 개발 >파이썬 튜토리얼 >파이썬 정규표현식【2】

파이썬 정규표현식【2】

黄舟
黄舟원래의
2017-02-04 17:12:181725검색

어제 내용에 이어 오늘은 바로 실습 들어가겠습니다. 정규식은 매우 강력하고 복잡하므로 지난번에 배운 내용의 범위를 벗어나는 이 실험의 부분에 대해서는 관련 문서를 참조하세요. 이 튜토리얼은 운영 및 유지 관리 엔지니어가 빠르게 시작할 수 있도록 돕기 위한 것입니다. 이해하지 못하더라도 직접 교체 도구로 사용할 수도 있습니다.

텔넷 및 SSH 자동 검사 스크립트의 정규식을 검토합니다. DeviceName = re.search('.*(?=#표시 run)',telreply).group(), telreply는 검사 내용이므로 로그 시작 부분을 열면 확인할 수 있습니다.

R1>enable
Password:
R1#terminal length 
0
R1#show run
Building 
configuration...

분명히 이 정규 표현식은 ' #show' 모든 문자(개행 문자 제외)는 물론 R1입니다.

더 복잡한 실험을 수행하고 더 많은 구성 조각을 가로채세요. 예를 들어 다음 구성에서는 이 장치의 각 인터페이스의 IP 주소를 찾아야 합니다.

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

로그에 할당하세요. 실제 환경은 로그를 직접 읽는 것입니다)

log = ''' #여기에 따옴표 3개가 있습니다. 그런 다음 Enter를 눌러 위 구성을 붙여넣은 다음 따옴표 3개를 입력하고 Enter를 누르세요. (여러 줄 문자열을 붙여넣는 데 따옴표 세 개를 사용할 수 있습니다).

파이썬 정규표현식【2】

이제 로그를 확인하세요.

>>> 
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'
>>>

문자열이 모두 한 줄에 있고 줄 바꿈이 실제로 'n'인 것을 확인할 수 있습니다. print(log)를 사용하면 표시 효과는 줄 바꿈을 사용하여 위와 동일합니다.

또한 Cisco 장비의 구성이 느낌표(!)로 구분되어 있는 것을 확인할 수 있습니다. 각 인터페이스의 시작은 'interface'이고, IP ​​주소 앞에는 'ip'가 있습니다. 주소'. 따라서 특정 인터페이스 구성의 첫 번째 줄과 일치하는 정규식에 '인터페이스(.*)n'이 있다고 상상하는 것은 어렵지 않습니다. 구성은 '!'으로 끝나므로 '!' 앞의 표현식에는 '(?=!)'가 필요합니다. 중간 구성의 줄 수는 가변적입니다. 확실한 것은 최소한 한 줄의 구성이 있고 개행 문자, 즉 '(.*n)+?)'가 있을 것이라는 점입니다. 여기서 '+?'는 이전 표현식(.*n)이 한 번 이상 비탐욕적으로 일치함을 의미합니다. 괄호를 사용하면 캡처 효과를 얻을 수 있지만 캡처 효과를 끄려면 왼쪽 괄호 뒤에 ?:를 추가하면 됩니다. 이 실험은 모든 문자열을 일치시키는 것이므로 're.findall()'을 사용합니다. 더 이상 설명할 필요 없이 다음 코드로 이동하세요.

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')]

결과적으로 각 인터페이스의 구성은 인터페이스 이름 + 구성의 튜플로 나뉘어 목록에 중첩됩니다.

파이썬 정규표현식【2】

다음으로 For 루프를 작성하여 인터페이스와 IP를 다시 가져옵니다.

파이썬 정규표현식【2】

작업 효과:

파이썬 정규표현식【2】

테스트 완료! 각 인터페이스의 IP 주소를 얻는 목적이 달성되었습니다.

이제 이 방법을 배웠으므로 나중에 장치의 구성이나 상태를 모니터링하는 데 사용할 수 있습니다. 예를 들어 인터페이스 상태가 원래 'UP'인 경우 'DOWN'이 됩니다. , 알림 이메일을 보내드립니다.

위는 Python 정규표현식[2]의 내용입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.