[英]python pyparsing string: A,b,b,b,A,b,b,b* [closed]
我有一個瘋狂的問題。
我正在嘗試使用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元素的列表。
是的,您可以將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']]]
我認為您有兩種選擇:
對自己擁有的東西保持滿意,然后事后清理:您有一個諸如your_list=[A,B,B,A,B,B]
? 你可以做
[ [x[i], x[i+1] + x[i+2]] for i in range(len(your_list)//3)]
+
將連接您的兩個[B]
列表(分別表示為x[i+1]
和x[i+2]
)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.