在下面的代码中,我正在搜索字符串,十六进制和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()
答案 0 :(得分: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
只需检查条件的顺序以捕获正确的案例(例如,如果您在区分大小写之前检查不区分大小写,则后者将永远不会发生,等等。)
答案 1 :(得分:2)
result = regex.search(line)
print result.group()
regex.search将返回一个结果对象。 result.group()返回的是匹配字符串的列表,在您的情况下,它将是一个包含1个项目的列表,匹配的字符串HEX,ASCII或字符串。