我可以打印出在多字符串正则搜索中匹配的字符串格式吗?
在下面的代码中,我正在查找字符串、十六进制和 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 个回答
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
只需要检查你条件的顺序,以确保能捕捉到正确的情况(比如,如果你先检查不区分大小写的情况,再检查区分大小写的情况,那么后者就永远不会发生,等等)。
2
result = regex.search(line)
print result.group()
regex.search 会返回一个结果对象。通过 result.group() 得到的是一个匹配字符串的列表。在你的情况下,这个列表里会有一个项目,就是匹配到的字符串,可能是 HEX、ASCII 或者普通字符串。