0

我想创建一个 Python 解析器来解析文件中的空格和语法。我想要做的是读取一个文件,并将每个空格、标点符号和单词放入列表中自己的元素中。到目前为止,我有以下用于分割空格的内容:

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

withwords保存文件内容列表,每个空格作为其自己的元素。但是,我在解析标点符号时遇到了麻烦,因为列表元素可以包含元素中"Hello"的引号等项目。相反,我希望它看起来像这样:

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

相对于:

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

如果有人可以帮助我,那就太好了!

4

2 回答 2

0

您可以使用re.findall来代替拆分。

import re

string = '"hello" @world'
L = re.findall(r'(\w+|[@"])', string)
print(L)
#['"', 'hello', '"', '@', 'world'] 
于 2013-10-20T22:59:42.137 回答
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', ':', ' ', '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']
于 2013-10-20T23:56:00.210 回答