2011-04-27 53 views
1

在下面的代码,我搜索字符串,十六进制和ASCII ....如果字符串匹配,该文件,其中字符串被匹配被打印。有没有办法打印什么字符串类型匹配(十六进制,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 2011-04-29 12:43:06

+0

'结果= regex.search(线)'' 打印result.group()' – 2011-04-29 12:49:24

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 2011-04-27 16:00:13