首页 > 解决方案 > Python - 用大括号分割多行字符串

问题描述

我创建了用括号分割多行字符串并将他的部分附加到列表的函数。

例子:

example = '''{First,
                              {[string]}},
                   {[Second,
                               {[(string)]}]},
                   {Third string}'''


start = 0
results = []
count = 0
for i in range(len(example)):
    if example[i] == '{':
        if count == 0:
            start = i
        count -=1
    if example[i] == '}':
        count +=1
        if count == 0:
            results.append(example[start:i+1])

print(len(results))
print(results)

这个的输出是(它是正确的,3个元素的列表):

3
['{First,\n                              {[string]}}', '{[Second,\n                               {[(string)]}]}', '{Third string}']

我的问题是,当我在字符串中的某处添加“额外”的打开和关闭括号时:

example = '''{First,
                              {[s{tring]}},
                   {[Second,
                               {[(string)]}]},
                   {Third st}ring}'''

我的函数返回我(只有 1 个元素的列表):

1
['{First,\n                              {[s{tring]}},\n                   {[Second,\n                               {[(string)]}]},\n                   {Third st}ring}']

是否可以避免这种情况并仅通过极端括号拆分字符串?如果您不明白我的问题,请随时提问!

编辑:

我还想提一下,括号之间可以是字符、整数、逗号、点等。

标签: pythonsplitmultilinecurly-braces

解决方案


一种可能的解决方案如下

l = [] 
for line in example.split('\n'): 
    if ']' in line: 
        s = f"{l[-1]}\n{line}" 
        l[-1] = s 
        else: 
            l.append(line)

推荐阅读