Python正则表达式之递归匹配
2022-02-01 19:49经验技巧
Python想要递归匹配嵌套或左右对称括号(也可以是“<”、“{”等类似符号),如提取“a(b(c)),d,e(f,g)”中的“a,d,e”,即去除括号及括号内的内容(括号可能嵌套),主要有以下三种方案:
nestedExpr库
from pyparsing import nestedExpr
def get_nested_expr(string):
if not string.startswith('('):
string = '(' + string + ')'
expr = nestedExpr('(', ')')
result = expr.parseString(string).asList()[0]
return ','.join([res.strip(',') for res in result if not isinstance(res, list)])
递归正则表达式
def get_nested_expr(string):
if not string.startswith('('):
string = '(' + string + ')'
while True:
output = re.sub(r'(?, '', string)
if output == string:
break
string = output
return output
regex库
import regex
def get_nested_expr(string):
return regex.sub(r'(?!^)((?:[^()]*|(?R))+)', '', string)
参考链接:
- https://oomake.com/question/325319
- python中递归的Regex模式 - 问答 - Python中文网
很赞哦! ()