使用pyparsing这份工作的难度? (初学者)(Difficulty of this par

2019-09-16 15:49发布

我有个任务要做到这一点我敢肯定,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不够好想法合并或找到新的。

我一直骂个不停的寻找例子,找东西,同样的工作,学习pyparsing的类和方法的更多Python的多,但我不知道我是多么远离知道足以让一些作品我的完整的解决方案,而不仅仅是中间练习,对于一般情况下将无法正常工作。

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

提前致谢! (PS - 在计算器上的第一篇文章,让我知道如果我需要关于这篇文章做不同的事情)

Answer 1:

在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']

转换为topic:subtopic等保留为一个练习OP。



文章来源: Difficulty of this particular job using pyparsing? (beginner)