#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
относиться к finalif
?2. о какой строке, в частности, вы спрашиваете?
regex = re.compile...
строка? если этого нет,if regex.search(line):
также отсутствует?3. какую ошибку вы получаете?
4. @El Ronnoco:
else
Предложение afterfor
выполняется, если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. Я ношу очки, и я этого не заметил, спасибо … все еще слепой.