面试题答案
一键面试在Python中,标准的re
模块并不直接支持递归分组。但是可以使用第三方库regex
来实现这一功能。以下是示例代码:
import regex
pattern = r'\((?>[^()]+|(?R))*\)'
text = "(a+(b*(c+d)))/e"
matches = regex.findall(pattern, text)
for match in matches:
print(match)
解释:
\(
:匹配左括号。(?>
:开启原子组,原子组内的内容作为一个整体匹配,匹配成功后不会回溯。[^()]+
:匹配除括号以外的任意字符,出现一次或多次。|
:或。(?R)
:递归调用整个正则表达式,用于匹配嵌套的括号表达式。
)*
:匹配零次或多次上述模式。\)
:匹配右括号。
regex.findall
会找到所有匹配的子表达式,在这个例子中就是各级嵌套的子表达式。
如果只能使用标准库re
,则无法直接实现递归匹配,可能需要使用栈等数据结构来模拟匹配过程。