在python中使用正则表达式进行Dhcpd租约匹配?

时间:2012-12-03 12:39:54

标签: python regex dhcp

我想匹配所有给出mac地址的dhcp租约。

我写了这段代码

fh = open(leaseFile)
lines = fh.read()
fh.close()
regex = r"lease\s*[0-9\.]+\s*\{[^\{\}]*%s[^\{\}]*?\}" % mac #mac comes as parameter
m = re.findall(regex,lines,re.DOTALL)

如果租约不包含'}'字符,这很有效。但如果确实如此,我的正则表达式失败了。 例如:

lease 10.14.53.253 {
  starts 3 2012/10/17 09:27:20;
  ends 4 2012/10/18 09:27:20;
  tstp 4 2012/10/18 09:27:20;
  binding state free;
  hardware ethernet 00:23:18:62:31:5b;
  uid "\001\000\013OW}k";
}

我无法弄清楚我是如何处理这个异常的。谢谢你的任何建议......

修改

经过研究,我决定在MULTILINE模式下使用这个正则表达式。它适用于我尝试过的所有租约。

fh = open(leaseFile)
lines = fh.read()
fh.close()
regex = r"lease\s*[0-9\.]+\s*\{[^\{\}]*%s[\s\S]*?^\}" % mac #mac comes as parameter
m = re.findall(regex,lines,re.MULTILINE)

1 个答案:

答案 0 :(得分:2)

regex = r'(lease\s*[0-9\.]+\s*\{[^\{\}]*%s[^\{\}]*(.*"[^\{\}]*\}|\}))' % mac #mac comes as parameter
m = re.findall(regex,lines)

这应该可以解决问题。