Pyparsing 查找文件中的第一次出现

1 投票
1 回答
545 浏览
提问于 2025-04-18 04:13

我正在通过下面的代码解析一个文件:

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

撰写回答