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)