是否有正则表达式来匹配大括号内的内容。例如,具有以下内容:

d = {'key': {'a': [1,2,3]}}

我想匹配 {'key':{'a':[1,2,3]}} {'a':[1,2,3] } ,但不是 {'key':{'a':[1,2,3]}

有帮助吗?

解决方案

在经典正则表达式中,这是不可能的--DFA无法解析嵌套对。

有一些方法可以使用扩展的正则表达式,例如某些正则表达式引擎(例如Perl正则表达式)中允许的递归表达式,但它们并不总是很漂亮。 (太多的php 提供了Perl版本: / \ {(?:[^ {}] + |(?R))* \} / (?R)选项是递归匹配。)

你不一定需要正则表达式来做这种事情。你可以简单地通过遍历列表并保持一堆开放的大括号(以及他们在什么位置看到)来做到这一点。然后每当你看到一个打开的大括号时,你将它的位置推到堆栈上,每当你看到一个紧密的大括号时,你会从堆栈中弹出最近看到的开放大括号,并使用它的位置加上当前位置作为子串的边界这成为你的比赛之一。重复,直到到达字符串的末尾。

其他提示

这很简单,但找到了匹配:)

{'key': {'\w+': \[[\w,]*\w\]}}

正则表达式无法处理嵌套,因此没有正则表达式可以在一般情况下使用。

如果可以限制最大嵌套深度,则可以构造一个表达式,该表达式明确检查所有可能的嵌套级别。通常,您最好使用某种解析器框架。

PCRE正则表达式库可以使用递归来执行此操作:

/\{(?:[^{}]+|(?R))*\}/
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top