Python Pyparsing在文件中找到第一个实例

Python Pyparsing在文件中找到第一个实例,python,pyparsing,Python,Pyparsing,我正在通过 output=wilcard.parseFile(myfile) print output 我只得到了第一个匹配的字符串 我有一个很大的配置文件要解析,其中的“条目”用大括号括起来。 我希望看到文件中的所有匹配项或不匹配的异常 如何实现这一点?默认情况下,pyparsing将从第一个字符开始查找最长的匹配。因此,如果您的解析由num=Word('0123456789')给出,则解析“462”或“462-780”都将返回相同的值。但是,如果传递了parseAll=True选项,则解析

我正在通过

output=wilcard.parseFile(myfile)
print output
我只得到了第一个匹配的字符串

我有一个很大的配置文件要解析,其中的“条目”用大括号括起来。 我希望看到文件中的所有匹配项或不匹配的异常


如何实现这一点?

默认情况下,pyparsing将从第一个字符开始查找最长的匹配。因此,如果您的解析由
num=Word('0123456789')
给出,则解析
“462”
“462-780”
都将返回相同的值。但是,如果传递了
parseAll=True
选项,则解析将尝试解析整个字符串。在这种情况下,
“462”
将匹配,但解析
“462-780”
将引发ParseException,因为解析器不知道如何处理破折号

我建议构造与整个文件相匹配的内容,然后使用
parseFile()
中的
parseAll=True
标志。如果我正确理解您对每个条目用大括号分隔的描述,可以执行以下操作

entire_file = OneOrMore('[' + wildcard + ']')
output = wildcard.parseFile(myfile,parseAll=True)
print output

在将整个文件读入字符串后,您也可以尝试使用
通配符.scanString
通配符.searchString
,但这样做会悄悄地丢失格式不正确的项目(您可能希望为其引发异常)。要获得“用大括号括起来的多个条目”,则此答案中显示的
一个或多个('['+entry+']')
解决方案是一条可行之路。