0
我想匹配所有給出mac地址的dhcp租約。Dhcpd在python中使用正則表達式匹配?
我寫了這個代碼
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";
}
我找不出如何處理這個異常。感謝您的任何意見...
編輯
研究之後,我決定用這個表達式具有多模式。它適用於我嘗試的所有租賃。
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)
請參閱[刪除從dhcpd.leases使用python mac給予mac的租約](http://stackoverflow.com/questions/13623593/13624313#13624313)。不要使用正則表達式來執行此任務,這不是正則表達式問題。 –
我知道。這個問題也是我的。但我無法使用pyparsing。 – ibrahim
我知道這是你的問題。問題在於,像[HTML和XML](http://stackoverflow.com/a/1732454/100297)這樣的DHCP租約是解析正則表達式的困難任務。您不應該爲此任務使用正則表達式。如果必須使用逐行閱讀,但正則表達式不會爲您解決這個問題。使用專用的解析器或pyparsing反而會更容易*。 –