我使用Pyparsing来解析一个日志文件,它的块如下所示:
keyName0: foo
keyName1: bar
msgKey [Read]: 21 FA 00 34
msgKey [Read]:
MESSAGE 1 of 2
keyName0: keyValue0
keyName1: keyValue1
Flags1: No Flags Set
Flags1: 0
Flags2: No Flags Set
Flags2: 0
keyName6: $12AB34CD56EF (123456789)
keyName7: 7
keyName8: 7
Data [Read]: 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
36 37 38
msgKey [Read]: 01 02 03 04
msgKey [Read]:
MESSAGE 2 of 2
# same structure as message above
keyName3: keyValue3
keyName4 [IN]: keyValue4 (123 IN)
keyName4 [OUT]: keyValue4 (123 OUT)
我为keyName值行编写了一个语法:
^{pr2}$这种语法对每一行都适用。现在我试着用这个语法来描述整个测试数据的语法:
message = Forward()
key_line = lineEnd + OneOrMore(Word(printables_no_column)).setParseAction(' '.join).setResultsName('keyName') + Suppress(':') \
+ MatchFirst(message, OneOrMore(Word(printables_no_column),stopOn=lineEnd).setParseAction(' '.join).setResultsName('keyValue'))
key_lines = ZeroOrMore(Group(key_line)).setResultsName('keys')
message << Literal('MESSAGE') + number + Literal('of')
+ number.setResultsName('totalMsgs') + key_lines
然而,我认为这种语法以无限递归结束。我需要帮助来理解如何正确使用Forward()递归语法。先谢谢你!在
这会让你前进一点。总体而言,可能还需要更好的结构,但我认为基本的部分在这里。见嵌入注释:
使用字符串来查找匹配的块:
^{pr2}$印刷品(节选如下):
相关问题 更多 >
编程相关推荐