Python - 返回第一组嵌套括号中的所有子字符串

时间:2015-04-22 22:59:30

标签: python regex string

我想找到一种有效的方法来从字符串中选择嵌套括号的 第一组 中包含的所有子字符串。

例如:

input: a d f gsds ( adsd ) adsdaa    
output: ( adsd )

input: adadsa ( sadad adsads ( adsda ) dsadsa ) ( dsadsad ) 
output: ( sadad adsads ( adsda ) dsadsa )

intput: a ana anan anan ( adad ( sad ) sdada asdad ) ( sadad ( adasd ) asda ) sdafds ( afdasf )
output: ( adad ( sad ) sdada asdad )

请注意,可能有多组嵌套括号。

一个 解决方案 将按char扫描字符串char,并跟踪打开的括号数量(减少数量,一旦我们有一个右括号),计数器再次变为0。

我想知道是否有更简单的方法可以做到这一点?也许用正则表达式?

由于

1 个答案:

答案 0 :(得分:2)

我写了一个小功能:

def parens(s):
    i=s[s.find('('):s.find(')')].count('(')   #counts number of '(' until the first ')'
    groups = s[s.find('('):].split(')')       #splits the string at every ')'
    print ')'.join(groups[:i]) +')'           #joins the list with ')' using the number of counted '('

演示:

>>> parens('a d f gsds ( adsd ) adsdaa')
( adsd )

>>> parens('adadsa ( sadad adsads ( adsda ) dsadsa ) ( dsadsad )')
( sadad adsads ( adsda ) dsadsa )

>>> parens('a ana anan anan ( adad ( sad ) sdada asdad ) ( sadad ( adasd ) asda ) sdafds ( afdasf )')
( adad ( sad ) sdada asdad )