2013-10-20 35 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']