【问题标题】:Parsing user expression for formatting errors解析格式错误的用户表达式
【发布时间】:2011-09-20 20:48:15
【问题描述】:

用户提供了一个包含 Python 表达式的字符串:"a==(1,1) and {b==2 or c==foo}"

我正在尝试编写一个检查以下规则的解析器:

  1. 逻辑表达式前后需要有一个空格(orand
  2. 大括号前后必须有空格
  3. 表达式中不应有空格(a ==(1,1) 无效)

我找到了“解析器”模块,但我不确定我是否理解它。

通过多个正则表达式建立所有规则(逐个字符读取字符串char并确定是否满足规则)非常繁琐。

解决这个问题最优雅的方法是什么?

【问题讨论】:

  • 在 Perl 中它看起来像这样 /^(((([\w\d]+)|((?4)(,(?4))+))==(? 3))|(\{(?1)\} (and|or) \{(?1)\}))$/ 我猜(未测试)。不知道python是否支持这样的表达方式。
  • 您的问题与 Python 认为的“语法错误”无关,所以我重新命名了您的问题(并稍微清理了一下)。如果您确实确​​实想要检查语法而不是格式,请编辑您的问题以澄清。
  • @agf:是的,我应该提到格式错误而不是“语法错误”。感谢您的纠正。
  • 所使用的提供的字符串是否可以包含任何 Python 表达式,或者只是类似于上面示例的子集?标识符可以只是单个字符,或者也可以是“糖果”或“工作”之类的东西?

标签: python regex parsing


【解决方案1】:

我想说的最优雅的方式是使用类似pyparsing 的东西,这是一个真正的解析器,结合了“pythonic”的易用性。

对于小型项目来说,这可能有点矫枉过正,但入门并不难,并且会允许语法大量增长。软件需求似乎总是朝着一个方向增长,所以我建议尝试一下。

【讨论】:

    猜你喜欢
    • 2017-05-10
    • 2021-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-17
    • 2020-07-11
    • 2019-03-22
    • 1970-01-01
    相关资源
    最近更新 更多