我有一个任务要做,我确信
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的练习.