regex 返回嵌套方括号之间文本的正则表达式[重复]

monwx1rj  于 2023-10-22  发布在  其他
关注(0)|答案(2)|浏览(104)

此问题已在此处有答案

How can a recursive regexp be implemented in python?(3个答案)
24天前关闭
我正在寻找一个正则表达式返回嵌套括号之间的文本,包括括号。我试图在Python中使用“re”库来实现这一点,但到目前为止还没有成功。非常感谢你的帮助。
例如:

INPUT = '{} abc {abc} cdf {"a":1, "b":"{"a":1, "b":{"a":1}}"}'

OUTPUT = ['{}', '{abc}', '{"a":1, "b":"{"a":1, "b":{"a":1}}"}']

import re

result = re.findall(**regex**, INPUT)

print(result)
f2uvfpb9

f2uvfpb91#

由于您试图匹配平衡的括号结构,一个干净而健壮的方法是使用支持递归的正则表达式引擎,例如regex模块,并使用(?R)模式递归匹配平衡的括号对:

import regex

INPUT = '{} abc {abc} cdf {"a":1, "b":"{"a":1, "b":{"a":1}}"}'
print(regex.findall(r'\{(?>[^{}]|(?R))*\}', INPUT))

该输出:

['{}', '{abc}', '{"a":1, "b":"{"a":1, "b":{"a":1}}"}']

演示:https://replit.com/@blhsing/CompetentBriskScans

h9vpoimq

h9vpoimq2#

除了使用正则表达式,您还可以简单地解析输入。例如:

OUTPUT = []
lvl = 0
s = ''
for c in INPUT:
    if c == '{':
        lvl += 1
        s += c
    elif c == '}':
        lvl -= 1
        s += c
        if lvl == 0:
            OUTPUT.append(s)
            s = ''
    elif lvl > 0:
        s += c

输出量:

# INPUT = '{} abc {abc} cdf {"a":1, "b":"{"a":1, "b":{"a":1}}"}'
>>> OUTPUT
['{}', '{abc}', '{"a":1, "b":"{"a":1, "b":{"a":1}}"}']

相关问题