下载帮

您现在的位置是:首页 > 教程分享 > 经验技巧

经验技巧

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)

参考链接:

  1. https://oomake.com/question/325319
  2. python中递归的Regex模式 - 问答 - Python中文网

文章评论