2015-07-29 3 views
-3

Я пытаюсь извлечь, что находится между скобками (включая скобки) рекурсивно.Basic Python - Извлечение строк

Это мое решение:

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

Так вы пытаетесь найти текст внутри сокровенные скобки? – JPeroutek

+0

Можете ли вы привести пример до и после того, что вы хотите сделать? –

+1

Будет ли только один набор круглых скобок? Что должно произойти здесь: ''(h (ello))''? – IanAuld

ответ

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 text[start+1:end-1] 

И снова:

>>> paren("h(ello)") 
'ello' 
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)) 
+0

@ n9code op упоминается о наличии только одного набора круглых скобок. так что этого решения должно быть достаточно –

+1

уже снял мой комментарий :) только что заметил [комментарий OP] (http://stackoverflow.com/questions/31704502/basic-python-extracting-strings/31704715#comment51348150_31704502) – bagrat

+0

@ n9code все круто: D –