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