基本的Python - 提取字符串

时间:2015-07-29 15:15:15

标签: python string recursion extract parentheses

我试图提取括号内的内容(包括括号)递归

这是我的解决方案:

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)

2 个答案:

答案 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))