显然这个问题经常出现,阅读后
用于检测分号终止的 C++ for & while 循环的正则表达式
并考虑了一段时间,我写了一个函数来返回包含在任意数量的嵌套()中的内容
该函数可以很容易地扩展到任何正则表达式对象,在这里发布以供您思考和考虑。
任何重构建议将不胜感激
(注意,我还是 python 新手,不想弄清楚如何引发异常或其他什么,所以如果函数无法弄清楚发生了什么,我只是让函数返回“失败”)
编辑功能以考虑评论:
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]]