我想创建一个Python解析器来解析文件中的空格和语法。我想要做的是读取一个文件,并将每个空格,标点符号和单词放入列表中的自己的元素中。以下我到目前为止分裂空白:
with open(fname, 'r') as f:
words = re.split("(\s+)", f.read())
带有words
的包含文件内容列表,每个空格都是自己的元素。但是,我在解析标点符号时遇到问题,因为列表元素可以包含"Hello"
之类的元素和元素中的引号。相反,我喜欢它,所以它看起来像这样:
list = ['"', 'Hello', '"', '@', 'World']
而不是:
list = ['"Hello"', '@World']
如果有人能帮助我,那就太棒了!
答案 0 :(得分:0)
您可以使用 re.findall 代替分割,而不是分裂。
import re
string = '"hello" @world'
L = re.findall(r'(\w+|[@"])', string)
print(L)
#['"', 'hello', '"', '@', 'world']
答案 1 :(得分: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:哦,你可能会被钉死在十字架上。BRIAN:被钉十字架?!
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']