我想匹配所有给定 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)