Home > Article > Backend Development > Python regular expression【2】
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).
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.
Next write a For loop to grab the interface and IP again:
Running effect:
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)!