Python实现括号匹配方法详解
在编程中,经常会出现需要判断一串括号是否匹配的情况。比如在字符串中,括号要求成对出现,否则就是语法错误。本文将介绍Python实现括号匹配的详细攻略。
方法一:使用栈来判断
使用栈来判断括号的匹配关系是一种常见的方法。可以将左括号入栈,遇到右括号就弹出栈顶元素进行匹配。
下面是Python实现该方法的示例代码:
def is_valid_parentheses(s: str) -> bool:
stack = []
for p in s:
if p in '([{':
stack.append(p)
else:
if not stack:
return False
if (p == ')' and stack[-1] != '(') or \
(p == ']' and stack[-1] != '[') or \
(p == '}' and stack[-1] != '{'):
return False
stack.pop()
return not stack
上述代码使用了一个列表作为栈来存储左括号。遇到右括号时,先判断栈是否为空,如果为空说明没有与之匹配的左括号,返回False
。如果栈不为空,再判断栈顶元素是否与当前右括号匹配,如果不匹配也返回False
。最后,如果字符串遍历完后栈为空,则说明括号匹配成功。
下面是该方法的一个示例:
>>> is_valid_parentheses('(1+2)*(3/(4-5)+6)')
True
>>> is_valid_parentheses('(()()(()))')
True
>>> is_valid_parentheses('())')
False
方法二:使用正则表达式来判断
如果字符串只包含左右括号,可以使用正则表达式来判断括号是否匹配。使用正则表达式可以将所有括号替换为某个标记,替换后字符串中括号的数量就变为了标记的数量。如果括号匹配成功,标记数量应该相同;如果括号匹配失败,标记数量不同。
下面是Python实现该方法的示例代码:
import re
def is_valid_parentheses(s: str) -> bool:
s = re.sub(r'[^\(\)]', '', s)
while '()' in s:
s = s.replace('()', '')
return not s
上述代码使用正则表达式将字符串中除了左右括号的字符都替换为空字符串。然后,循环检查字符串中是否还有相邻的一对括号,如果有则去掉。最后,如果字符串为空,则说明括号匹配成功。
下面是该方法的一个示例:
>>> is_valid_parentheses('(1+2)*(3/(4-5)+6)')
True
>>> is_valid_parentheses('(()()(()))')
True
>>> is_valid_parentheses('())')
False
可以看到,使用正则表达式实现括号匹配的代码量更少,但是只适用于只包含左右括号的字符串。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python实现括号匹配方法详解 - Python技术站