разбор вложенных скобок в python, захват содержимого по уровням

По-видимому, эта проблема возникает довольно часто, прочитав

Регулярное выражение для обнаружения циклов for & while в C ++ с точкой с запятой

и подумав некоторое время над проблемой, я написал функцию для возврата содержимого, содержащегося внутри произвольного числа вложенных ()

Эту функцию можно легко расширить до любого объекта регулярного выражения, разместив здесь свои мысли и соображения.

любые советы по рефакторингу будут оценены

(обратите внимание, я все еще новичок в python, и мне не хотелось выяснять, как вызывать исключения или что-то еще, поэтому я просто получил функцию return 'fail', если она не мог понять, что происходит)

Отредактированная функция с учетом комментариев:

def ParseNestedParen(string, level):
    """
    Return string contained in nested (), indexing i = level
    """
    CountLeft = len(re.findall("\(", string))
    CountRight = len(re.findall("\)", string))
    if CountLeft == CountRight:
        LeftRightIndex = [x for x in zip(
        [Left.start()+1 for Left in re.finditer('\(', string)], 
        reversed([Right.start() for Right in re.finditer('\)', string)]))]

    elif CountLeft > CountRight:
        return ParseNestedParen(string + ')', level)

    elif CountLeft < CountRight:
        return ParseNestedParen('(' + string, level)

    return string[LeftRightIndex[level][0]:LeftRightIndex[level][1]]

14
задан Community 23 May 2017 в 01:54
поделиться