Python-用尖括号分隔多行字符串

问题描述 投票:0回答:3

我创建了将多行字符串用方括号分隔并将其部分追加到列表的函数。

示例:

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}']

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

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

我的函数还给我(仅列出1个元素):

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

可以避免这种情况,只用尖括号将字符串分开?如果您不明白我的问题,请随时提问!

编辑:

我还要提到括号之间的字符可以是char,整数,逗号,点等。

python split multiline curly-braces
3个回答
0
投票

以下是一种可能的解决方案

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

0
投票

由于需要更好的代码可读性,我需要回答kaihami。您的函数不适用于更多指定的字符串,例如:

example = '''[{This,
                      {{is,'more'},
                       [{specify,
                            string}}}'''

0
投票

这是您想要的吗?

import re

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


elements = re.split(r'{*},', example)

>>> [
    '{First,\n                              {[s{tring]}',
    '\n                   {[Second,\n                               {[(string)]}]',
    '\n                   {Third st}ring}'
]   
© www.soinside.com 2019 - 2024. All rights reserved.