Python字符串操作,通过找到右括号到左括号来删除内容

Rin*_*ind 1 python string

问题是从左括号 '[' 到右括号 ']' 中删除内容,
我设法将其写出来,但由于输出不是问题想要的输出,因此我未能通过给我的某些测试用例。

我得到的提示是,首先找到主要的右括号']',然后追溯到最新的左括号'[',并删除从主要的右括号开始到最新的左括号的所有内容。
但是,我不知道如何写出来。任何帮助表示赞赏谢谢

我的代码如下:

def trial():
    b = False
    user_input = input("test cases : ")
    formatstr = ""
    for i in user_input:
        if '[' in i:
            b = True
        elif not b:
            formatstr += i
        if ']' in i:
            b = False
     print(formatstr)
 trial()
Run Code Online (Sandbox Code Playgroud)

这些是具有所需输出的测试用例。

其次是我的输出失败了一些测试用例

[[bean]abc  ? [abc  
**My Output = abc**  `Testcase failed`    
    
 [bean]]abc ? ]abc  
**My Ouput = ]abc** `Testcase passed`
    
 abc[foo][qwerty] ? abc  
**My Output = abc** `Testcase passed`
    
 abc[qwerty]bean] ? abcbean]  
**My Output = abcbean]** `Testcase passed`
 
  abc[qwerty[bean] ? abc[qwerty
**My Output = abc**  `Testcase failed`
   
  bean[abc[qwe]dfg] ? bean
**My Output = beandfg]**  `Testcase failed`
Run Code Online (Sandbox Code Playgroud)

Mar*_*yer 5

您通常通过实现堆栈来处理嵌套结构。当您遇到 a 时"[",将一个项目添加到堆栈中,而当"]"pop()从堆栈中遇到一个you 时。否则,您将添加到堆栈顶部的项目的附加。在您的示例中,您需要确保添加了实际的括号,因为测试似乎需要它们。这可能看起来像:

def trial(user_input):
    groups = ['']
    for i in user_input:
        if i == '[':
            groups.append(i)
        elif i == ']' and len(groups) > 1:          
            groups.pop()
        else:
            groups[-1] += i
    return "".join(groups)

assert(trial("[[bean]abc") == "[abc")
assert(trial("[bean]]abc") == "]abc")
assert(trial("abc[foo][qwerty]") == "abc")
assert(trial("abc[qwerty]bean]") == "abcbean]")
assert(trial("abc[qwerty[bean]") == "abc[qwerty")
assert(trial("bean[abc[qwe]dfg]") == "bean")

# all pass
Run Code Online (Sandbox Code Playgroud)