【发布时间】:2017-09-09 10:09:56
【问题描述】:
我制作了一个在 python 中将中缀转换为后缀的程序。问题是当我介绍这些论点时。 如果我介绍这样的东西:(这将是一个字符串)
( ( 73 + ( ( 34 - 72 ) / ( 33 - 3 ) ) ) + ( 56 + ( 95 - 28 ) ) )
它会用 .split() 分割它,程序将正常工作。 但我希望用户能够介绍这样的内容:
((73 + ( (34- 72 ) / ( 33 -3) )) + (56 +(95 - 28) ) )
如您所见,我希望空格可以是微不足道的,但程序继续用括号、整数(不是数字)和操作数分割字符串。
我尝试用 for 解决它,但我不知道如何捕获整个数字 (73 , 34 ,72) 而不是逐个数字 (7, 3 , 3 , 4 , 7 , 2)
总而言之,我想要的是将((81 * 6) /42+ (3-1)) 之类的字符串拆分为:
[(, (, 81, *, 6, ), /, 42, +, (, 3, -, 1, ), )]
【问题讨论】:
-
正则表达式不适用于嵌套括号。 grako 很好,但如果您只需要这样做,它可能是重量级的。我喜欢 grako,因为你最终得到了可读的代码。
-
感谢您的提问,它帮助我获得了银色 Python 徽章!
-
@MichaelGrazebrook 使用正则表达式来获取token还是合理的,然后你可以在后期验证括号(可能使用解析器库,可能使用手写递归下降或分流场)解析器)
标签: python string python-3.x split tokenize