2013-10-20 33 views
0

我想創建一個Python解析器來解析文件中的空白和語法。我想要做的是讀取一個文件,並將每一個空格,標點符號和單詞放入列表中它自己的元素中。下面我至今對分手了空白:解析所有的空格和語法

with open(fname, 'r') as f: 
    words = re.split("(\s+)", f.read()) 

words持有的每個空格作爲自己的元素的文件內容的列表。不過,我在解析標點時遇到問題,因爲列表元素可能包含元素中帶有引號的項目,例如"Hello"。相反,我想它,這樣它會尋找像這樣:相對於

list = ['"', 'Hello', '"', '@', 'World'] 

list = ['"Hello"', '@World'] 

如果有人可以幫助我,那將是偉大的!

+0

'\ s'意味着空白。如果你想分割其他東西,你必須添加到分割正則表達式。例如'[\ s''@]' –

+0

好吧,如果可能的話,我想包含「@全部」元素。 @MarcB – user1871869

回答

0

我以爲edi_allen有它,但後來看到,空白沒有使用findall進入列表。

with open(fname, 'r') as f: 
    words = re.split('(["\'@&,;:\(\)\s+\*\?\.]|\w+)', f.read()) 

#because each list element is separated from the next by an empty string: 
while '' in words: 
    words.remove('')  
print (words)   

考慮到與下面內容的文本文件:

BRIAN:他們會做什麼給我?

BEN:哦,你可能會被釘死在十字架上。

布里安:被釘十字架?!

BEN:是的,初犯。

返回的列表是:

>>> ['BRIAN', ':', ' ', 'What', ' ', 'will', ' ', 'they', ' ', 
'do', ' ', 'to', ' ', 'me', '?', '\n', 'BEN', ':', ' ', 'Oh', ',', ' ', 
'you', "'", 'll', ' ', 'probably', ' ', 'get', ' ', 'away', ' ', 
'with', ' ', 'crucifixion', '.', '\n', 'BRIAN', ':', ' ', 
'Crucifixion', '?', '!', '\n', 'BEN', ':', ' ', 'Yeah', ',', ' ', 
'first', ' ', 'offence', '.', ' ', '\n'] 
0

而不是拆分,您可以使用re.findall爲此。

import re 

string = '"hello" @world' 
L = re.findall(r'(\w+|[@"])', string) 
print(L) 
#['"', 'hello', '"', '@', 'world']