Python - Разделить многострочную строку по крайним скобкам - PullRequest
0 голосов
/ 08 января 2020

Я создал функцию, которая разбивает многострочную строку на квадратные скобки и добавляет его части в список.

пример:

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

Можно ли избежать этой ситуации и разбить строку только по крайним скобкам? Если вы не поняли мой вопрос, пожалуйста, не стесняйтесь спрашивать!

РЕДАКТИРОВАТЬ:

Я также хочу отметить, что между скобками может быть что-нибудь вроде char, целых чисел, запятых, точек и т. Д. c.

Ответы [ 3 ]

0 голосов
/ 08 января 2020

Мне нужно ответить вам kaihami из-за лучшей читаемости кода. Ваша функция не работает для более подробной строки, например:

example = '''[{This,
                      {{is,'more'},
                       [{specify,
                            string}}}'''
0 голосов
/ 08 января 2020

Ты этого хочешь?

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}'
]   
0 голосов
/ 08 января 2020

Одним из возможных решений является следующее

l = [] 
for line in example.split('\n'): 
    if ']' in line: 
        s = f"{l[-1]}\n{line}" 
        l[-1] = s 
        else: 
            l.append(line)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...