pyparsing:跳到下一个标记,忽略其间的所有内容
pyparsing: skip to the next token ignoring everything in between
我正在尝试解析包含多个条目的日志文件,格式如下:
ITEM_BEGIN item_name
some_text
some_text
可以 可选地 包含与 my_expr
匹配的表达式在其自身的任何地方。我只对 item_name
和 my_expr
感兴趣(或者 None
如果它丢失了)。理想情况下,我想要的是 (item_name, my_expr)
对的列表。使用 pyparsing 提取此信息的最佳方法是什么?
如果您不想为整个输入文本定义解析器,而只是其中的一部分,请考虑使用 pyparsing 的 searchString
或 scanString
方法 - 大致如下:
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())
我正在尝试解析包含多个条目的日志文件,格式如下:
ITEM_BEGIN item_name
some_text
some_text
可以 可选地 包含与 my_expr
匹配的表达式在其自身的任何地方。我只对 item_name
和 my_expr
感兴趣(或者 None
如果它丢失了)。理想情况下,我想要的是 (item_name, my_expr)
对的列表。使用 pyparsing 提取此信息的最佳方法是什么?
如果您不想为整个输入文本定义解析器,而只是其中的一部分,请考虑使用 pyparsing 的 searchString
或 scanString
方法 - 大致如下:
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())