【发布时间】:2011-09-20 20:48:15
【问题描述】:
用户提供了一个包含 Python 表达式的字符串:"a==(1,1) and {b==2 or c==foo}"。
我正在尝试编写一个检查以下规则的解析器:
- 逻辑表达式前后需要有一个空格(
or或and) - 大括号前后必须有空格
- 表达式中不应有空格(
a ==(1,1)无效)
我找到了“解析器”模块,但我不确定我是否理解它。
通过多个正则表达式建立所有规则(逐个字符读取字符串char并确定是否满足规则)非常繁琐。
解决这个问题最优雅的方法是什么?
【问题讨论】:
-
在 Perl 中它看起来像这样 /^(((([\w\d]+)|((?4)(,(?4))+))==(? 3))|(\{(?1)\} (and|or) \{(?1)\}))$/ 我猜(未测试)。不知道python是否支持这样的表达方式。
-
您的问题与 Python 认为的“语法错误”无关,所以我重新命名了您的问题(并稍微清理了一下)。如果您确实确实想要检查语法而不是格式,请编辑您的问题以澄清。
-
@agf:是的,我应该提到格式错误而不是“语法错误”。感谢您的纠正。
-
所使用的提供的字符串是否可以包含任何 Python 表达式,或者只是类似于上面示例的子集?标识符可以只是单个字符,或者也可以是“糖果”或“工作”之类的东西?