Я хочу, чтобы "grep" несколько регулярных выражений на несколько файлов. У меня есть все эти регулярные выражения в файле (по одному в каждой строке), что я загружаю следующим образом, построение «супер регулярное выражение»:Python: как искать несколько paterns в нескольких файлах
dic = open('regex.dic')
rex = []
for l in iter(dic):
if not l.startswith('#'):
rex.append('^.*%s.*$' % l.strip())
rex = '|'.join(rex)
debug('rex='+rex)
global regex
regex = re.compile(rex, re.IGNORECASE|re.MULTILINE)
dic.close()
Затем я проверить мои файлы, как это:
with open(fn, 'r') as f: data = f.readlines()
for i, line in enumerate(data):
if len(line) <= 512: #Sanity check
if regex.search(line):
if not alreadyFound:
log("[!]Found in %s:" % fn)
alreadyFound = True
found = True
copyFile(fn)
log("\t%s" % '\t'.join(data[i-args.context:i+args.context+1]).strip())
Это работает. Я чувствую, что это действительно неэффективно и опасно (некоторое регулярное выражение в dic может сломать «супер-регулярное выражение»). Я думал о циклах в массиве регулярных выражений, но это означало бы сканирование каждого файла несколько раз:/
Любая блестящая идея о том, как это сделать? Благодаря!
На самом деле я действительно не вижу проблемы с этим. Не обязательно особенно элегантный, но, как вы говорите, он выполняет свою работу с относительной эффективностью. – jdotjdot