我必须从输入文件中匹配文件墙的配置。在输入文件中,我将指定一个正则表达式。此正则表达式应与防火墙命令的输出匹配。
假设防火墙输出如下
ssh 192.217.254.20 255.255.255.255 junk_string
ssh 192.217.248.0 255.255.252.0 junk_string
ssh 192.217.254.21 255.255.255.255 junk_string
ssh 192.217.254.25 255.255.255.255 junk_string
ssh 192.217.254.38 255.255.255.255 junk_string
ssh 192.217.254.42 255.255.255.255 junk_string
ssh 192.115.24.64 255.255.255.224 junk_string
ssh 192.217.240.0 255.255.252.0 junk_string
ssh 192.217.236.0 255.255.252.0 junk_string
ssh 192.217.255.78 255.255.255.255 junk_string
我希望匹配9行,如下面的正则表达式。
(sh 192.217.((254.(20|21|25|38|42)|255.78) 255.255.255.255|(240|248|236).0 255.255.252.0) [^ ]*\r\n?){9}
但是当我将此正则表达式用于re.match或re.search时,规则将不会匹配,因为第7行。
有没有办法以任何顺序检查此正则表达式。我的意思是它应匹配9行,即使其中有一些不需要的行。
更新, 这就是我使用它的方式
if re.match(result_expected[command],actual_result,re.M|re.I):
if verbose == "True":
print("Command output and expected output Matched")
result_expected - is our regex I have given above.
actual_result - is the 10 lines which is output of the command executed on the firewall.
确定。为了更清楚,我的模式适用于以下14行。
pattern='(ssh 192.(168.((254.(2|6|20|21|25|38|42)|255.78|255.91|255.92) 255.255.255.255|(240|248|236).0 255.255.252.0)|115.24.64 255.255.255.224) [^ ]*\r?\n?){14}'
ssh 192.168.240.0 255.255.252.0 junk_string
ssh 192.168.248.0 255.255.252.0 junk_string
ssh 192.168.236.0 255.255.252.0 junk_string
ssh 192.168.254.42 255.255.255.255 junk_string
ssh 192.168.254.25 255.255.255.255 junk_string
ssh 192.168.254.21 255.255.255.255 junk_string
ssh 192.168.255.78 255.255.255.255 junk_string
ssh 192.168.254.20 255.255.255.255 junk_string
ssh 192.168.254.38 255.255.255.255 junk_string
ssh 192.115.24.64 255.255.255.224 junk_string
ssh 192.168.254.2 255.255.255.255 junk_string
ssh 192.168.254.6 255.255.255.255 junk_string
ssh 192.168.255.91 255.255.255.255 junk_string
ssh 192.168.255.92 255.255.255.255 junk_string
但是当我们添加另一行
时ssh 172.31.1.30 255.255.255.255 junk_string
然后正则表达式失败
ssh 192.168.240.0 255.255.252.0 junk_string
ssh 192.168.248.0 255.255.252.0 junk_string
ssh 192.168.236.0 255.255.252.0 junk_string
ssh 192.168.254.42 255.255.255.255 junk_string
ssh 192.168.254.25 255.255.255.255 junk_string
ssh 192.168.254.21 255.255.255.255 junk_string
ssh 192.168.255.78 255.255.255.255 junk_string
ssh 192.168.254.20 255.255.255.255 junk_string
ssh 192.168.254.38 255.255.255.255 junk_string
ssh 172.31.1.30 255.255.255.255 junk_string
ssh 192.115.24.64 255.255.255.224 junk_string
ssh 192.168.254.2 255.255.255.255 junk_string
ssh 192.168.254.6 255.255.255.255 junk_string
ssh 192.168.255.91 255.255.255.255 junk_string
ssh 192.168.255.92 255.255.255.255 junk_string
我的要求是正则表达式只要有14行就可以正常工作。即使额外的行在之前/之后/之间出现。
我们如何实现这一目标?
答案 0 :(得分:0)
如果你想在字面上匹配一个点,你应该将其转义为\.
,否则它将意味着匹配任何字符。还有一个领先的s
缺失,现在它说sh
。
如果您使用替换并且不想捕获值,则可以使用非捕获组(?:
要匹配ssh 192.115.24.64 255.255.255.224 junk_string
以外的所有行,您可以使用findall。
如果没有捕获群组,您可以将以下行匹配: