1
我正在写一个文件格式的分析器,并有一个例子,我归纳为以下:为什么这个pyparsing语法不尊重行尾?
import pyparsing as pp
element = pp.OneOrMore(pp.Word(pp.alphas)) | pp.Literal("|")
line = pp.Group(pp.OneOrMore(element)) + pp.White("\n")
top_level = pp.OneOrMore(line)
f = """
sdf dfg sdfgsdfsd | dsfgsdfsd sd sddffds safd | dfgdfg sadf |
dsfg gdfg asdsad | gdfgdf dfgdfgdf sdf | dfgdfgdf |
"""
parse_result = top_level.parseString(f)
print(parse_result.dump())
这给:
[['sdf', 'dfg', 'sdfgsdfsd', '|', 'dsfgsdfsd', 'sd', 'sddffds', 'safd', '|', 'dfgdfg', 'sadf', '|', 'dsfg', 'gdfg', 'asdsad', '|', 'gdfgdf', 'dfgdfgdf', 'sdf', '|', 'dfgdfgdf', '|'], '\n']
[0]:
['sdf', 'dfg', 'sdfgsdfsd', '|', 'dsfgsdfsd', 'sd', 'sddffds', 'safd', '|', 'dfgdfg', 'sadf', '|', 'dsfg', 'gdfg', 'asdsad', '|', 'gdfgdf', 'dfgdfgdf', 'sdf', '|', 'dfgdfgdf', '|']
[1]:
我想是对的每一行文本显示为一个单独的Group(),并且我不清楚为什么pp.White("\n")
语句与第一个语句不匹配(我也尝试LineEnd()
,结果相同)。
默认情况下,pyparsing跳过标记之间的空格。空白包括换行符。 – user2357112
是的,但我有一个专门匹配换行符的表达式。这令我感到困惑。 – u38cg
没关系。这不会阻止它跳过空白以匹配更多的“元素”。 – user2357112