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