正则表达式:匹配多行表达式

时间:2020-12-22 11:29:29

标签: regex

首先,this 没有回答我的问题。我已经尝试了几乎所有这些,它们大多在明确指定的 1 个额外新行内匹配。

问题:假设我有字典或任何其他类似 JSON 的对象。我在文件中有很多,我想匹配每一个。例如:

some_var = {
    'foo': 'bar',
    'list_foo': ['bar1', 'bar2'],
}
other_var = [
    {
        'foo1': 'bar1',
        'foo2': True
    },
    {
        'foo_list1': ['bar3', 'bar4'],
        'foo2': 'bar2'
    },
]

值可以是任何东西,但字典。所以没有嵌套的字典。

我的最终目标是匹配每组 {} 之间的所有内容,包括数字括号(可选,但可取)。所以当我运行正则表达式时,我会得到这些匹配:

{
    'foo': 'bar',
    'list_foo': ['bar1', 'bar2'],
}
{
    'foo1': 'bar1',
    'foo2': True
}
{
    'foo_list1': ['bar3', 'bar4'],
    'foo2': 'bar2'
}

我的一个关闭尝试是:

\{(.*\n)*\}

但它匹配文件中第一个 { 和最后一个 } 之间的所有内容。还有许多其他尝试,但没有一个适用于可变的 dict 大小。

我在 PyCharm 中运行这个正则表达式是为了快速重构一些代码。

请不要提供解决方法。我已经以不同的方式解决了这个问题,但仍然对这个确切的解决方案感到好奇。

1 个答案:

答案 0 :(得分:0)

使用{[^}]+}

正则表达式应该包含除右花括号之外的任何内容。

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