匹配来自cisco网络配置

时间:2016-05-20 20:11:47

标签: python regex

我想使用python re module从此cisco配置匹配expression_A AND expression_B。

我的逻辑:

expression_A = "permit tcp 96.0.0.0 0.255.255.255 any eq www"

expression_B = "permit tcp 98.0.0.0 0.255.255.255 any eq telnet"

如果匹配expression_A AND expression_B则打印一些东西。

配置文件:

interface Serial1/3
 no ip address
 shutdown
 serial restart-delay 0
!
!
!
no ip http server
no ip http secure-server
!
access-list 101 permit tcp 96.0.0.0 0.255.255.255 any eq www
access-list 101 permit tcp 98.0.0.0 0.255.255.255 any eq telnet
!
!
!
control-plane
!
!
line con 0
 exec-timeout 0 0
 logging synchronous
 stopbits 1
line aux 0
 stopbits 1
line vty 0 4
 login local
 transport input all
-----------

3 个答案:

答案 0 :(得分:1)

这并不需要正则表达式,因为position: relative运算符就足够了:in检查一个字符串是否包含另一个字符串。当我们将inin结合使用时,我们可以使用此代码检查您的配置字符串是否包含两个表达式:

and

答案 1 :(得分:0)

正如卡西米尔在评论中提到的,你不需要在这里使用RE。

with open('config.txt', 'r') as config_file:
    config = config_file.read()
if expression_A in config and expression_B in config:
    print("something")

答案 2 :(得分:0)

虽然正则表达式不是必须匹配常量字符串,正如其他人所说,你可以实现“字符串匹配这个 AND “逻辑使用正则表达式前瞻,格式为:(?=.*this)(?=.*that),所以:

(?=.*permit tcp 96\.0\.0\.0 0\.255\.255\.255 any eq www)(?=.*permit tcp 98\.0\.0\.0 0\.255\.255\.255 any eq telnet) //singleline

只有在存在BOTH字符串时才会匹配(顺序无关紧要)。

demo