【问题标题】:Parse all whitespace and grammar解析所有空格和语法
【发布时间】:2013-10-20 22:47:22
【问题描述】:

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

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

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

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

相对于:

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

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

【问题讨论】:

  • \s 表示空格。如果您想拆分其他内容,则必须将其添加到拆分正则表达式中。例如[\s"'@]
  • 好吧,如果可能的话,我想将 "'@ all 作为元素包含在内。@MarcB

标签: python regex string file parsing


【解决方案1】:

我以为 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']

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-16
      • 2015-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多