0

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)
4

1 に答える 1

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

これでうまくいくはずです。

于 2012-12-03T13:56:34.707 に答える