我试图提取括号内的内容(包括括号)递归。
这是我的解决方案:
def paren(txt):
if txt[1] == ")":
return ''
if txt[0] == "(":
if len(txt) > 2:
return txt[1] + paren(txt[:1] + txt[2:])
return txt[1]
if len(txt) > 2:
return paren(txt[1:])
return ""
但它不包括任何括号。我该如何解决?
示例:
print paren("h(ello)o")
Output: (ello)
print paren("(hello)")
Output: (hello)
答案 0 :(得分:2)
如果您有一对括号,我建议您使用Halcyon Abraham Ramirez's answer。否则,请尝试以下方法:
def paren(text):
pstack = 0
start = 0
end = len(text)
for i, c in enumerate(text):
if c == '(':
if pstack == 0:
start = i
pstack += 1
elif c == ')':
pstack -= 1
if pstack == 0:
end = i
break
return text[start:end]
这是一个例子:
>>> paren("h(ello)")
'(ello)'
如果您不需要根括号,可以像这样修改return语句:
return text[start+1:end-1]
再次:
>>> paren("h(ello)")
'ello'
答案 1 :(得分:2)
使用index
word = "hehlllllllll(ooooo)jejejeje"
def extract(word):
return word[word.index("("):word.index(")") + 1]
输出:
(ooooo)
进一步发展。 如果有多个括号:
a = "h((el(l))o"
def extract_multiple_parenthesis(word):
closing_parenthesis = word[::-1].index(")")
last_parenthesis_index = (len(word) - closing_parenthesis)
return word[word.index("("):last_parenthesis_index]
输出:
((el(l))