簡體   English   中英

解析二維列表

[英]Pyparsing two-dimensional list

我有以下示例數據:

165 150 238 402 395 571 365 446 284 278 322 282 236 
16 5 19 10 12 5 18 22 6 4 5 
259 224 249 193 170 151 95 86 101 58 49 
6013 7413 8976 10392 12678 9618 9054 8842 9387 11088 11393;

它等效於二維數組(除了每一行沒有相等數量的列)。 每行的末尾是一個空格,然后是一個\\n ,最后一個條目除外,后面沒有空格,只有一個;

有人知道pyparsing語法分析器來解析嗎? 我一直在嘗試以下方法,但是不會匹配。

data = Group(OneOrMore(Group(OneOrMore(Word(nums) + SPACE)) + LINE) + \
           Group(OneOrMore(Word(nums) + SPACE)) + Word(nums) + Literal(";")

理想的輸出如下

[['165', '150', '238', '402', '395', '571', '365', '446', '284', '278', 
'322', '282', '236'], ['16', '5', ... ], [...], ['6013', ..., '11393']]

任何幫助將不勝感激。

您可以使用stopOn參數來OneOrMore ,以使其停止匹配。 然后,由於默認情況下換行符是可跳過的空格,因此下一組可以開始匹配,並且它將跳過換行符並從下一個整數開始。

import pyparsing as pp

data_line = pp.Group(pp.OneOrMore(pp.pyparsing_common.integer(), stopOn=pp.LineEnd()))
data_lines = pp.OneOrMore(data_line) + pp.Suppress(';')

將此應用於您的示例數據:

data = """\
165 150 238 402 395 571 365 446 284 278 322 282 236 
16 5 19 10 12 5 18 22 6 4 5 
259 224 249 193 170 151 95 86 101 58 49 
6013 7413 8976 10392 12678 9618 9054 8842 9387 11088 11393;"""

parsed = data_lines.parseString(data)

from pprint import pprint
pprint(parsed.asList())

打印:

[[165, 150, 238, 402, 395, 571, 365, 446, 284, 278, 322, 282, 236],
 [16, 5, 19, 10, 12, 5, 18, 22, 6, 4, 5],
 [259, 224, 249, 193, 170, 151, 95, 86, 101, 58, 49],
 [6013, 7413, 8976, 10392, 12678, 9618, 9054, 8842, 9387, 11088, 11393]]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM