显然,这个问题出现了相当频繁,读解析在python嵌套的括号,按级别抢内容
Regular expression to detect semi-colon terminated C++ for & while loops
和思考一会儿这个问题后,我写了一个函数返回所包含的内容内嵌任意数量的嵌套()
该函数可以很容易地扩展到任何正则表达式对象,在这里发表您的想法和注意事项。
任何重构的建议,将不胜感激
(注意,我是新来的蟒蛇还在,并没有觉得自己搞清楚如何引发异常或什么的,所以我只是有函数返回“失败”如果couldin't弄清楚发生了什么事情)
编辑功能考虑到的意见:
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]]
与 相关的行为ParseNestedParen('(a)(b)(c)',0) 实际上是正确的,但我的功能是工作的错误工具,我用 写了函数string =“some_function another_function(some_argument))“ 记住。 为什么返回列表?不应该有。好点,谢谢! 什么时候我会返回失败?我不知道。也许永远不会它从那里我编码功能 repairedly调用查找所有是浪费?因此,我应该在[“\(”,“\)”]] 中使用列表 countparen = [re.findall(str)for str并使用它? 我该如何重新理解括号? 感谢您的意见! – 2010-11-26 12:18:40