Home  >  Article  >  Backend Development  >  Python regular expression【2】

Python regular expression【2】

黄舟
黄舟Original
2017-02-04 17:12:181691browse

Following yesterday’s content, today we will go into actual practice. Because regular expressions are very powerful and complex, please refer to the relevant documents for the parts in this experiment that are beyond the scope of what you learned last time. This tutorial is only to help operation and maintenance engineers get started quickly. If you don’t understand it, you can also use it as a direct replacement tool. .

Review the regular expressions in Telnet and SSH automatic inspection scripts: DeviceName = re.search('.*(?=#show run)',telreply).group(), telreply is the content of the inspection, then you can see it when you open the beginning of the log:

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

Obviously, this regular expression is to match before '#show' Any character (except newline), then of course it is R1.

Do a more complicated experiment and intercept more configuration fragments. For example, the following configuration requires finding the IP address of each interface of this device:

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

Assign it to the log Medium: (The real environment is to read the log log directly)

log = ''' #Here are three quotes, then press Enter to paste the above configuration, then press Enter three quotes, and press Enter. (Three quotes can be used to paste multi-line strings).

Python regular expression【2】

Now check the log:

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

You can find that the strings are all on one line, and the line break is actually '\n'. If you use print(log) , then the display effect will be the same as above with line breaks.

You can also find that the configuration of Cisco equipment is separated by exclamation marks (!). The beginning of each interface is 'interface', and the IP address is preceded by 'ip'. address'. So it is not difficult to imagine that there is 'interface(.*)\n' in the regular expression, which matches the first line of an interface configuration. The configuration ends with '!', so the expression before '!' requires '(?=!)'. The number of lines of configuration in the middle is uncertain. What is certain is that there is at least one line of configuration and there will be a newline character, that is, '(.*\n)+?)'. '+?' here means non-greedy matching of the previous expression (.*\n) one or more times. Parentheses can achieve the capture effect, but if you want to turn off the capture effect, just follow the left bracket with a ?:. This experiment is to match all strings, so 're.findall()' is used. No more explanation, just go to the 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')]

The result is that the configuration of each interface is divided into tuples of interface name + configuration, nested in a list.

Python regular expression【2】

Next write a For loop to grab the interface and IP again:

Python regular expression【2】

Running effect:

Python regular expression【2】

Test completed! The purpose of obtaining the IP address of each interface is achieved.

Now that I have learned this method, I can use it to monitor the configuration or status of the device in the future. For example, if the interface status is originally 'UP', if it changes to 'DOWN', I will send you an email to notify you.

The above is the content of Python regular expression [2]. For more related content, please pay attention to the PHP Chinese website (www.php.cn)!


Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn