我想找到一种有效的方法来从字符串中选择嵌套括号的 第一组 中包含的所有子字符串。
例如:
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。
我想知道是否有更简单的方法可以做到这一点?也许用正则表达式?
由于
答案 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 )