Как сделать несколько срезов в строке?
Есть строка 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 шт):
можно так попробовать
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]
как вариант методом isdigit() проверять, является ли символ цифрой. Ну а далее проверять соседние с ним символы, и если это скобка, или другая цифра - добавлять в подстроку, которую потом добавлять в список.