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

2024-10-02 10:21:10 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我找到了能做到这一点的this程序,但遗憾的是它不适用于字符串引号。不幸的是,我不完全理解这个程序是如何工作的,所以我无法修复它。有人能告诉我如何改变程序,使之适用于字符串分隔符('和')。在

我现在的代码是:

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:

^{pr2}$

Tags: 字符串代码in程序sourcereturnifcheck
1条回答
网友
1楼 · 发布于 2024-10-02 10:21:10

即使遇到关闭的",也会在堆栈上推送"。在

解决方案:尽早检查当前字符是否可以关闭某些内容,以及某些内容是否在堆栈顶部(delimStack[-1]):

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

def check_match(source):
    delimStack = ['sentinel']
    for c in source:
        if c in delimCloseToOpen and delimCloseToOpen[c] == delimStack[-1]:
            delimStack.pop()
        elif 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'))

输出:

^{pr2}$

相关问题 更多 >

    热门问题