首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >平分二维表

平分二维表
EN

Stack Overflow用户
提问于 2017-04-03 22:26:14
回答 1查看 152关注 0票数 1

我有以下样本数据:

代码语言:javascript
运行
复制
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,除了最后一个条目之外,后面没有空格,只有一个;

有人知道解析这个的语法吗?我一直在尝试一些类似的东西,但它将不匹配。

代码语言:javascript
运行
复制
data = Group(OneOrMore(Group(OneOrMore(Word(nums) + SPACE)) + LINE) + \
           Group(OneOrMore(Word(nums) + SPACE)) + Word(nums) + Literal(";")

理想情况下,所需输出如下

代码语言:javascript
运行
复制
[['165', '150', '238', '402', '395', '571', '365', '446', '284', '278', 
'322', '282', '236'], ['16', '5', ... ], [...], ['6013', ..., '11393']]

如能提供任何协助,将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-04 02:32:56

您可以使用stopOn参数来使OneOrMore停止匹配。然后,由于换行符在默认情况下是可跳过的空格,下一个组可以开始匹配,它将跳过换行符,从下一个整数开始。

代码语言:javascript
运行
复制
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(';')

将此应用于示例数据:

代码语言:javascript
运行
复制
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())

指纹:

代码语言:javascript
运行
复制
[[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]]
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43195344

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档