首页 > 解决方案 > 正则表达式:匹配多行表达式

问题描述

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

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

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

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

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

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

我的关闭尝试之一是:

\{(.*\n)*\}

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

我在 PyCharm 中运行这个正则表达式,试图快速重构一些代码。

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

标签: regex

解决方案


利用{[^}]+}

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

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


推荐阅读