2013-06-27 82 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 [] 

正則表達式是正確的。爲什麼讀完文件後,正則表達式不再匹配?最後如何使用正則表達式解析文件中的文本?

回答

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你說得對,我已經改寫了我的答案。 –