Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我可以打印多字符串、正则表达式搜索中匹配的字符串格式吗_Python_Regex - Fatal编程技术网

Python 我可以打印多字符串、正则表达式搜索中匹配的字符串格式吗

Python 我可以打印多字符串、正则表达式搜索中匹配的字符串格式吗,python,regex,Python,Regex,在下面的代码中,我正在搜索字符串、十六进制和ascii。。。。如果字符串匹配,则打印匹配字符串的文件。是否有方法打印匹配的字符串类型(十六进制、ascii或字符串)?另外,我想考虑上、下例和数字[09] +。我不确定是否可以将其添加到同一个正则表达式中,或者添加另一个regexp行是否更好: elif searchType =='2': print " Directory to be searched: c:\Python27 " directory = os.path

在下面的代码中,我正在搜索字符串、十六进制和ascii。。。。如果字符串匹配,则打印匹配字符串的文件。是否有方法打印匹配的字符串类型(十六进制、ascii或字符串)?另外,我想考虑上、下例和数字[09] +。我不确定是否可以将其添加到同一个正则表达式中,或者添加另一个regexp行是否更好:

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()
regex.search将返回一个结果对象。result.group()返回的是匹配字符串的列表,在您的例子中,它将是一个包含1项的列表,匹配字符串十六进制、ASCII或字符串

regex.search将返回一个结果对象。result.group()返回的是匹配字符串的列表,在您的例子中,它将是一个包含1项的列表,即匹配字符串十六进制、ASCII或字符串。

这如何

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
看看您的regexp(三个可能的单词之一,没有真正的regexp特性),我将完全避免使用regexp

您可以轻松添加其他功能:

    elif userstring.lower() in line.lower():
        print 'User input (case-insensitive) in file: ' + os.path.join(root, file)
        break
只需检查您的条件顺序,以捕获正确的大小写(即,如果在区分大小写之前先检查不区分大小写,则后者将永远不会发生,等等)。

这样如何

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
看看您的regexp(三个可能的单词之一,没有真正的regexp特性),我将完全避免使用regexp

您可以轻松添加其他功能:

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

只需检查您的条件顺序即可捕获正确的大小写(即,如果您在区分大小写之前先检查不区分大小写,则后者永远不会发生,等等)

谢谢!但是为了知道,我如何向上面的regexp添加不区分大小写的特性(例如re.IGNORECASE)?谢谢!但是为了知道,我如何在上面的regexp中添加一个不区分大小写的特性(例如re.IGNORECASE)?Julien-当你说调用group()时,你是什么意思?我仍然对这个
result=regex.search(line)
print result.group()
Julien-当你说调用group()时,你是什么意思?这个
result=regex.search(line)
print result.group()