2013-06-27 6 views
0

Я пытаюсь разобрать .txt файл с регулярным выражением:Синтаксический текст в файле с регулярным выражением

#file = '22 test 333' 

with open('file.txt', 'r') as f: 
    pattern = '\d\d(?=\s)' # should match 22 
    data = re.compile(pattern) 
    print f.read()   # prints '22 test 333' 
    print data.findall(f.read()) # outputs an empty list [] 

Regex является правильным. Почему после того, как я прочитал файл, регулярное выражение больше не совпадает? И, наконец, как разобрать текст из файла с помощью регулярного выражения?

ответ

4

Вы читаете файл уже. Указатель файла теперь находится в конце, и вы больше не будете читать данные.

хранилище данных файлов один раз:

contents = f.read() 
print contents     # prints '22 test 333' 
print data.findall(contents) # outputs ['22'] 

С другой стороны, стремятся вернуться к началу:

print f.read()     # prints '22 test 333' 
f.seek(0) 
print data.findall(f.read()) # outputs ['22'] 

или открыть файл.

1

Вы просматриваете файл, который уже прочитан. Если вы опустите строку «print f.read()», все должно работать. Кроме того, после печати файла вы можете сделать «f.seek (0)», и это должно вернуть курсор в файл в первую позицию.

1

Сохраните возвращаемое значение от f.read() в переменную. Первый f.read() фактически считывает все данные и помещает указатель файла в конец файла. Итак, следующий file.read() фактически возвращает пустую строку ''.

text = f.read() 
print data.findall(text) 
+0

@MartijnPieters Вы правы, я перефразировал свой ответ. –