Как сделать несколько срезов в строке?

Есть строка n="√(9)-√(4)+5", и мне надо добавить в список числа, которые находятся в скобках (9,4). Все что находиться под циклом while,идет на другом уровне.

В данном коде при первом прохождении цикла все работает как надо, но при втором - все ломается, и место 4 выводится -√(4

n = "√(9)-√(4)"
i = 0
while i < 2:
    z = n[n.find("(") + 1:]
    final_sr = z.split(")")[i]
    print(final_sr)
    i += 1

Ответы (2 шт):

Автор решения: Zhihar

можно так попробовать

import re

n = "√(9)-√(14)+5"

res = list(map(int, re.findall(r'\((\d+)\)', n)))

r'\((\d+)\)' означает, что в строке будут искаться подстроки, которые описываются шаблоном (цифры)

\d означает, что ищется цифра (одна)

\d+ означает, что будет искаться любое кол-во цифр

\(\) означает, что искаться будет внутри круглых скобок (поскольку круглые скобки в шаблонах выполняют служебную роль, то скобки как символы должны экранироваться

() означает, что мы ищем то, что находится в скобках (в нашем случае \d+, т.е. цифры), если в шаблоне не указать скобки, то будет искаться то, что совпадает с шаблоном, т.е. в нашем случае вместо 9 и 14 будет найдено (9) и (14)

ну и треш-вариант:

res = []

for obj in n.split(')'):
    data = obj.split('(')
    if len(data) > 1:
        res.append(int(data[-1]))

и однострочный треш-вариант:

res = [int(obj.split('(')[-1]) for obj in n.split(')') if len(obj.split('(')) > 1]
→ Ссылка
Автор решения: AndreyM

как вариант методом isdigit() проверять, является ли символ цифрой. Ну а далее проверять соседние с ним символы, и если это скобка, или другая цифра - добавлять в подстроку, которую потом добавлять в список.

→ Ссылка