По-видимому, эта проблема возникает довольно часто, прочитав
Регулярное выражение для обнаружения циклов 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]]