显然这个问题经常出现, 阅读
Regular expression to detect semi-colon terminated C++ for & while loops
思考了一下,我编写了一个函数来返回嵌套的小括号内的内容。
这个函数可以轻松地扩展到任何正则表达式对象,我在此张贴并等待您的想法和考虑。
如果能提供任何重构建议将不胜感激。
(请注意,我仍然是 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]]
list(parenthetic_contents('a(b(c)(d)e)(f)g'))
actually gives me[(1, 'c'), (1, 'd'), (0, 'b(c)(d)e'), (0, 'f')]
- Peter