【问题标题】:Regex for Function Block Parsing [duplicate]功能块解析的正则表达式 [重复]
【发布时间】:2016-01-31 22:00:53
【问题描述】:

我需要一些正则表达式帮助。

我试图做的是一个功能块解析模式。

函数如下所示:

fn name() {
    contents
}

fn name2() {
    contents2
}

我使用这个模式来解析它:(fn \w+\s*\(.*\)\s*{.+(?<=}))

它按预期工作,但不是只匹配第一个 },它应该是“name”函数的结尾,它一直持续到最后一个 } 基本上在整个文档中找到。有人可以帮我解决吗?

非常感谢。

【问题讨论】:

  • 如果contents 可以包含n 对任何n > 0 的成对大括号集,那么您无法使用正则表达式正确解析它,因为它不是正则语言。
  • 得到了解决方案,问题只是块解析。谢谢!
  • 对我来说,这看起来像是一个词法分析模式比正则表达式更好的解决方案。
  • 是的。它是一个练习正则表达式的小型转换器,我选择这种方法是因为我不熟悉词法分析的东西。

标签: python regex parsing expression


【解决方案1】:

使用 .* 和 .+ 您会贪婪地匹配任何字符,这就是为什么您会消耗最后一个 } 字符之前的所有内容。改成 。*?和 .+ 到 .+?

演示:https://regex101.com/r/pC0hF0/1

虽然这解决了您的临时问题,但请注意@CollinD 关于嵌套大括号的评论。

【讨论】:

  • 谢谢。搞砸了一段时间。
猜你喜欢
  • 1970-01-01
  • 2011-01-23
  • 2012-11-21
  • 2014-10-28
  • 1970-01-01
  • 2015-01-29
  • 2015-07-16
  • 2018-04-29
  • 1970-01-01
相关资源
最近更新 更多