【问题标题】:Python - Split multiline string by extreme bracketsPython - 用大括号分割多行字符串
【发布时间】:2020-01-08 18:23:12
【问题描述】:

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

示例:

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

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

编辑:

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

【问题讨论】:

    标签: python split multiline curly-braces


    【解决方案1】:

    一种可能的解决方案如下

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

        这是你想要的吗?

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

        【讨论】:

        • 我认为更好,但如果字符串内部是类似“}”的字符怎么办?我想提一下,极端括号之间可以是任何东西,每个字符、整数、逗号、点等。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-02-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多