2011-04-27 2 views
1

아래 코드에서 문자열, 16 진수 및 ASCII를 검색하고 있습니다 .... 문자열이 일치하면 파일 일치하는 것이 인쇄되었습니다. 어떤 문자열 유형이 일치했는지 (16 진수, ascii 또는 문자열)를 인쇄하는 방법이 있습니까? 또한 대문자와 소문자 및 숫자 [0-9] +를 고려하고 싶습니다. 나는 같은 정규 표현식이를 추가 할 수 있는지 확실하지 않습니다, 또는 다른 정규 표현식 줄을 추가하는 것이 좋습니다 것 :여러 문자열, 정규식 검색에서 일치하는 문자열 형식을 인쇄 할 수 있습니까

elif searchType =='2': 
     print " Directory to be searched: c:\Python27 " 
     directory = os.path.join("c:\\","Python27") 
     userstring = raw_input("Enter a string name to search: ") 
     userStrHEX = userstring.encode('hex') 
     userStrASCII = ' '.join(str(ord(char)) for char in userstring) 
     regex = re.compile("(%s|%s|%s)" % (re.escape(userstring), re.escape(userStrHEX), re.escape(userStrASCII)) 
     for root,dirname, files in os.walk(directory): 
     for file in files: 
      if file.endswith(".log") or file.endswith(".txt"): 
       f=open(os.path.join(root, file)) 
       for line in f.readlines(): 
        #if userstring in line: 
        if regex.search(line):  
         print "file: " + os.path.join(root,file)   
         break 
       else: 
        print "String NOT Found!" 
        break 
       f.close() 

답변

2
result = regex.search(line) 
print result.group() 

regex.search는 결과 객체를 반환합니다. result.group()에 의해 반환되는 것은 일치하는 문자열의 목록이며, 귀하의 경우 1 개의 항목, 일치하는 문자열 HEX, ASCII 또는 문자열이있는 목록이됩니다.

+0

줄리앙 - 그룹()에 대한 호출을 할 때 무엇을 의미합니까? 나는 아직도 이것에 곤란하다. – suffa

+0

'result = regex.search (line)' 'print result.group()' –

4

어때? 당신의 정규 표현식 (세 가지 단어와 진짜 정규 표현식 기능 중 하나)을 보면

for line in f.readlines(): 
    if userstring in line: 
     print 'User input in file: ' + os.path.join(root, file) 
     break 
    elif userStrHEX in line: 
     print 'HEX string in file: ' + os.path.join(root, file) 
     break 
    elif userStrASCII in line: 
     print 'ASCII string in file: ' + os.path.join(root, file) 
     break 

, 나는 모든 정규 표현식을 사용하지 않는 것입니다.

쉽게 더 기능을 추가 할 수 있습니다 : 대소 문자를 구별하기 전에 대소 문자를 구분 선택하면

elif userstring.lower() in line.lower(): 
     print 'User input (case-insensitive) in file: ' + os.path.join(root, file) 
     break 

그냥 (즉 권리 경우를 잡으려고 조건의 순서를 확인, 후자는 등 결코 일어나지 않을 것입니다)

+0

고마워! 하지만 알기 위해 위의 정규 표현식에 대소 문자를 구분하지 않는 기능을 추가하는 방법은 무엇입니까 (예 : re.IGNORECASE)? – suffa