Python-检查所有分隔符是否匹配并关闭

Python-检查所有分隔符是否匹配并关闭,python,delimiter,Python,Delimiter,我正在尝试编写一个Python程序,它接受一个字符串并检查是否所有分隔符都已匹配和关闭 我发现这个程序可以做到这一点,但遗憾的是它不适用于字符串引号。不幸的是,我不完全理解这个程序是如何工作的,所以我无法修复它。有人能告诉我如何将程序更改为适用于字符串分隔符和 我目前的代码是: delimOpens = ['[', ']', '(', ')', '{', '}', '"', "'"] delimCloseToOpen = {']':'[', ')':'(', '}':'{', '"':'"',

我正在尝试编写一个Python程序,它接受一个字符串并检查是否所有分隔符都已匹配和关闭

我发现这个程序可以做到这一点,但遗憾的是它不适用于字符串引号。不幸的是,我不完全理解这个程序是如何工作的,所以我无法修复它。有人能告诉我如何将程序更改为适用于字符串分隔符和

我目前的代码是:

delimOpens = ['[', ']', '(', ')', '{', '}', '"', "'"]
delimCloseToOpen = {']':'[', ')':'(', '}':'{', '"':'"', "'":"'"}

def check_match(source):
    delimStack = ['sentinel']
    for c in source:
        if c in delimOpens:
            delimStack.append(c)
        elif c in delimCloseToOpen:
            if delimCloseToOpen[c] != delimStack.pop():
                return False
    return (len(delimStack) == 1)

if __name__ == "__main__":
    print(check_match('{(abc)22}[14(xyz)2]'))
    print(check_match('[ { ] }'))
    print(check_match('{ (x) } ['))
    print(check_match('This is "hello" world'))
    print(check_match('This is "hello world'))
问题在于,对于有效字符串,代码返回false:

print(check_match('This is "hello" world'))
即使遇到关闭操作,也会在堆栈上推送

解决方案:提前检查当前角色是否可以关闭某些内容,以及堆栈顶部delimStack[-1]中是否有内容:

输出:

$ python3 so_50153245.py
True
False
False
True
False

如何区分开始和结束?每个开始都需要一个结束。当你遇到结束时,你在堆栈上推一个。这是学生学习堆栈时的一个常见示例…遗憾的是,你的解决方案在我的测试用例中也返回False。我的代码仍然是False。你确定你改变了它吗?delimStack[-1]做什么?@superdoophero:你确定你在尝试我的代码吗?我附加了我的代码输出,它按预期工作。我复制了你的代码大约3次,全部返回False
$ python3 so_50153245.py
True
False
False
True
False