python
  • regex
  • 2013-05-07 2 views 1 likes 
    1

    여러 파일에서 여러 정규 표현식을 "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의 일부 정규 표현식은 "super regex"를 깨뜨릴 수있다.) 나는 생각에 대한 정규식 배열에 반복 하지만 각 파일에 여러 번 스캔 의미 :/

    이 작업을 수행하는 방법에 대한 브릴리언트 생각을? 감사!

    +0

    실제로이 문제는 실제로 나타나지 않습니다. 반드시 우아 할 필요는 없지만, 말하면서, 그것은 상대적 효율성으로 일을 끝내게됩니다. – jdotjdot

    답변

    1
    if l and l[0] != '#': 
        try: 
         re.compile(s) 
        except: 
         #handle any way you want 
        else: 
         rex.append('^.*({0}).*$'.format(l.strip())) 
    

    이렇게하면 형식이 잘못된 정규식이 처리됩니다.

    관련 문제