MST

星途 面试题库

面试题:Python正则表达式专家之递归分组与复杂模式匹配

编写一个Python正则表达式,用于匹配具有递归结构的表达式,例如形如(a+(b*(c+d)))/e 这样的数学表达式,这里的括号可以无限嵌套。使用正则表达式的递归分组技巧来实现对这种表达式结构的准确匹配,并提取出各级子表达式。
15.0万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试

在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,则无法直接实现递归匹配,可能需要使用栈等数据结构来模拟匹配过程。