Pyparsing 查找文件中的第一次出现
我正在通过下面的代码解析一个文件:
output=wilcard.parseFile(myfile)
print output
但是我只得到了字符串的第一个匹配结果。
我有一个很大的配置文件需要解析,里面有一些“条目”,这些条目是用大括号括起来的。
我希望能看到文件中所有的匹配结果,或者如果没有匹配的情况也能得到提示。
我该怎么做呢?
1 个回答
1
默认情况下,pyparsing会从第一个字符开始,找到最长的匹配。所以,如果你的解析规则是 num = Word('0123456789')
,那么解析 "462"
或 "462-780"
都会得到相同的结果。不过,如果你使用了 parseAll=True
这个选项,解析器会尝试解析整个字符串。在这种情况下,"462"
会被匹配成功,但解析 "462-780"
就会出现一个解析异常,因为解析器不知道如何处理这个连字符。
我建议你构建一个可以匹配整个文件的规则,然后在 parseFile()
中使用 parseAll=True
这个标志。如果我理解你说的每个条目都是用大括号分开的意思没错的话,可以这样做。
entire_file = OneOrMore('[' + wildcard + ']')
output = wildcard.parseFile(myfile,parseAll=True)
print output