顯然,這個問題出現了相當頻繁,讀解析在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