Регулярное выражение вызывает ошибку, которую я, похоже, не могу найти

#python #regex #search

#python #регулярное выражение #Поиск

Вопрос:

Приведенный ниже код работал нормально, пока я не добавил строку регулярного выражения. Когда я закомментирую это, код снова заработает… Я в тупике. Я использую регулярное выражение только для одновременного поиска в файле строк трех разных типов (ascii, hex, string). Любая помощь приветствуется, спасибо!

  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()
  

Комментарии:

1. Я не специалист по Python, но ваш отступ здесь правильный? например, должен ли final else относиться к final if ?

2. о какой строке, в частности, вы спрашиваете? regex = re.compile... строка? если этого нет, if regex.search(line): также отсутствует?

3. какую ошибку вы получаете?

4. @El Ronnoco: else Предложение after for выполняется, если for выполняется до завершения (без break выхода). Это имеет смысл, поскольку оно используется здесь.

5. @Emil если регулярное выражение = повторно.скомпилировать … отсутствует, ошибки нет

Ответ №1:

Когда я запустил этот код, я получил ошибку типа

 File "search.py", line 7
    for root,dirname, files in os.walk(directory):
      ^
SyntaxError: invalid syntax
  

Это связано с тем, что в предыдущей строке, которая содержит скомпилированное регулярное выражение, отсутствуют закрывающие круглые скобки:

 regex = re.compile( "(%s|%s|%s)" % ( re.escape( userstring ), re.escape( userStrHEX ), re.escape( userStrASCII ) )
  

следует прочитать

 regex = re.compile( "(%s|%s|%s)" % ( re.escape( userstring ), re.escape( userStrHEX ), re.escape( userStrASCII ) ) )
  

Комментарии:

1. Я ношу очки, и я этого не заметил, спасибо … все еще слепой.