繁体   English   中英

python pyparsing字符串:A,b,b,b,A,b,b,b * [关闭]

python pyparsing string: A,b,b,b,A,b,b,b* [closed]

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我有一个疯狂的问题。

我正在尝试使用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元素的列表。

2 个回复

是的,您可以将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] )。

1 如何a = 3和b = 4?

我发现了一个有趣的编程问题: 执行此程序后,a,b,c,f的值是多少? 我认为价值观 a = 2,b = 2,c = 2和f = 2但 当我执行此程序时,我得到a = 3,b = 4,c = 2和f = 2。 我了解c和f如何将其值设为2,但是a = 3和b = ...

2 如果b = 5,为什么〜b = -6?

我无法进行2完成度计算。 我知道C编译〜b,如果b = 5,谁会将所有位都反转为-6。 但为什么? int b = 101,将所有位取反为010,那么对于2表示法,我只加1但变为011,即3,这是错误的答案。 我应该如何使用位反转运算符〜进行计算? 相似的问题:如果a ...

3 如果不是(a和b),如果不是(a和b)

谁能解释为什么这两个陈述不相等? 我试图通过将第一个语句更改为第二个语句来使程序更易于理解,但是它不起作用。 我不完全明白为什么。 ...

2013-05-15 01:39:07 3 6984   logic
4 “ A不是B”与“ A是(不是B)”

我对“不是”运算符有些担心,当打算使用“是(不是X)”时,可能会解释“不是X”。 确实存在一些表达式A和B这样: 与...不同 ? 附录 。 使用此运算符被认为是一种好习惯吗? not (A is B)应该被优先选择吗? ...

2014-07-07 15:51:01 2 962   python
6 没有Python(a ** b)的a的b的幂

要求我在没有该运算符的情况下写a ** b的练习很费劲。 试图自己写点东西,但没有得到正确的结果。 而不是一个值得到两个,两者都是错误的。 似乎计数器并没有真正增加。 我可以寻求帮助吗? 谢谢! ...

8 a,b = b,a + b好蟒蛇? [关闭]

我从“使用Python构建技巧”中选择了这种编码风格。 来自PHP和Obj-C这种类型的多变量赋值不可用(至少不是我见过的)。 但对我来说似乎更合乎逻辑。 毕竟,为什么我必须在替换之前将'a'分配给'保持变量'。 问题是,这种编码风格是pythonic吗? 这是一个Fibon ...

9 如何从B继承B的同时继承B的类A? [关闭]

所以我有两个类,分别是book和mainscreen ,其中book是从mainscreen公开继承的。 现在,我想通过主屏幕的成员函数使用班级簿的公共成员函数。 这是我的代码: 调用部分: 当我尝试在主mainscreen的成员函数中使用类book公共成员函数时,出 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2021 STACKOOM.COM