По-видимому, эта проблема возникает довольно часто после прочтения
Регулярное выражение для обнаружения циклов С++ и для циклов while и while с запятой и т.д.
и некоторое время думая о проблеме, я написал функцию для возврата содержимого, содержащегося внутри произвольного числа вложенных()
Функция может быть легко распространена на любой объект регулярного выражения, размещая здесь свои мысли и соображения.
любые рекомендации по рефакторингу будут оценены
(заметьте, я еще новичок в 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]]