ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python – 使用pyparsing这项特殊工作的难度? (初学者)

2019-07-04 10:45:45  阅读:177  来源: 互联网

标签:python parsing pyparsing


我有一个任务要做,我确信Python和pyparsing可以真正帮助,但我仍然是一个新手编程,以明智地选择完整的实现将是多么具有挑战性,是否值得尝试或肯定是一个没有结果的时间.

任务是翻译任意长度和嵌套深度的字符串,其结构遵循以下一般语法:

item12345 'topic(subtopic(sub-subtopic), subtopic2), topic2'

进入字典中的项目,如下所示:

{item12345, 'topic, topic:subtopic, topic:subtopic:sub-subtopic, topic:subtopic2, topic2'}

换句话说,逻辑就像数学,其中括号左边的项目被分配到内部的所有内容,而’,’表示括号内的术语,就像二项式因子的加法函数一样.

我要么自己发现,要么发现并理解到目前为止创建这个解决方案的一些看似必要的元素的例子.

在Python中解析嵌套表达式:

def parenthetic_contents(string):
"""Generate parenthesized contents in string as pairs (level, contents)."""
stack = []
for i, c in enumerate(string):
    if c == '(':
        stack.append(i)
    elif c == ')' and stack:
        start = stack.pop()
        yield (len(stack), string[start + 1: i])

将一个字符串分发给其他人:

from pyparsing import Suppress,Word,ZeroOrMore,alphas,nums,delimitedList

data = '''\
MSE 2110, 3030, 4102
CSE 1000, 2000, 3000
DDE 1400, 4030, 5000
'''

def memorize(t):
    memorize.dept = t[0]

def token(t):
    return "Course: %s %s" % (memorize.dept, int(t[0]))

course = Suppress(Word(alphas).setParseAction(memorize))
number = Word(nums).setParseAction(token)
line = course + delimitedList(number)
lines = ZeroOrMore(line)

final = lines.parseString(data)

for i in final:
    print i

还有其他一些,但这些方法并不直接适用于我的最终解决方案,而且在我理解python和pyparsing以便结合这些想法或找到新的想法之前,我还有很长的路要走.

通过寻找示例,寻找类似的东西,学习更多python以及更多的pyparsing的类和方法,我一直在抨击它,但我不知道我有多远,因为我不知道能做出有效的东西对于我的完整解决方案而不仅仅是针对一般情况不适用的中间练习.

所以我的问题是这些.为了做我正在寻找的事情,我最终需要多么复杂的解决方案?您有什么建议可以帮助我更接近?

提前致谢! (PS – 关于StackOverflow的第一篇文章,如果我需要就此帖子做任何不同的事情,请告诉我)

解决方法:

在pyparsing中,你的例子看起来像:

from pyparsing import Word,alphanums,Forward,Optional,nestedExpr,delimitedList

topicString = Word(alphanums+'-')
expr = Forward()
expr << topicString + Optional(nestedExpr(content=delimitedList(expr)))

test = 'topic(subtopic(sub-subtopic), subtopic2), topic2'

print delimitedList(expr).parseString(test).asList()

打印

['topic', ['subtopic', ['sub-subtopic'], 'subtopic2'], 'topic2']

转换为主题:子主题等留作OP的练习.

标签:python,parsing,pyparsing
来源: https://codeday.me/bug/20190704/1376356.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有