我有一个疯狂的问题。
我正在尝试使用pyparsing来解析如下内容:(点是无关紧要的隐藏文本)
...... A
B .......
B .......
...... A
B .......
B .......我需要的是这样的东西:(将A和B元素连接到一个列表中)
[ [ [A],[B,B] ], [ [A],[B,B] ] , ...]这是我的代码,它不工作,只返回第一个A
table = pyparsing.OneOrMore(pyparsing.Group(A + (pyparsing.OneOrMore(pyparsing.Group(B) | pyparsing.SkipTo(B).suppress()))) | pyparsing.SkipTo(A).suppress())我已经解决了这个pyparsing到如下列表的问题:
[ [A],[B],[B], [A],[B],[B] , ...]但这是不可接受的,因为A和B元素在一个列表中没有直接联系。
值得一提的是
table1 = pyparsing.ZeroOrMore(pyparsing.Group(A) | pyparsing.SkipTo(A).suppress())
table2 = pyparsing.ZeroOrMore(pyparsing.Group(B) | pyparsing.SkipTo(B).suppress())工作并返回所有A元素和B元素的列表。
发布于 2012-09-13 21:08:25
是的,你可以将OneOrMore嵌入到其他的OneOrMore中--如果你不能这样做,它会严重限制你可以编写的解析器。
我认为,如果你做得更好,你也许能够调整你现有的解决方案。看看这个玩具示例中是如何定义组的:
test = """
...... A
B .......
B .......
...... A
B .......
B ......."""
from pyparsing import Literal, Word, printables, Group, OneOrMore
A = Literal("A")
B = Literal("B")
notAorB = Word(printables, excludeChars="AB")
parser = OneOrMore(Group(A + Group(OneOrMore(B))))
parser.ignore(notAorB)
print parser.parseString(test).asList()打印:
[['A', ['B', 'B']], ['A', ['B', 'B']]]发布于 2012-09-13 16:34:35
我想你有两个选择:
your_list=[A,B,B,A,B,B]这样的列表吗?你可以直接做[ [xi,xi+1 + xi+2]表示范围内的i(len(Your_list)//3)]
+将连接两个[B]列表(表示为x[i+1]和x[i+1]
https://stackoverflow.com/questions/12402239
复制相似问题