pyparsing:跳到下一个标记,忽略其间的所有内容

时间:2017-03-28 16:56:32

标签: python pyparsing

我正在尝试使用以下格式解析包含多个条目的日志文件:

ITEM_BEGIN item_name
  some_text

some_text 可选包含my_expr在其自身内的任何位置匹配的表达式。我只对item_namemy_expr感兴趣(如果缺少None,则感兴趣)理想情况下,我想要的是(item_name, my_expr)对的列表。使用pyparsing提取此信息的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

如果您没有尝试为整个输入文本定义解析器,而只是为其中的某些部分定义解析器,请查看使用pyparsing的searchStringscanString方法 - 这些内容:

import pyparsing as pp
ident = Word(alphas, alphanums+'_')
item_header = pp.Keyword("ITEM_BEGIN") + ident("name")
other_expr = ... whatever ...

search_expr = item_header | other_expr

found = {}
current_name = ''
for result in search_expr.searchString(input_text):
    result = result[0]
    if result[0] == "ITEM_BEGIN":
        print("found an item header with name {name}".format_map(result))
        current_name = result.name
        found[result.name] = []
    else:
        # found an other expr
        found[current_name].append(result.asList())