RimMirK
@RimMirK
Вроде человек. Вроде учусь. Вроде пайтону

Как достать из строки все что между скобок?

функция print_var()
def var2str(var, vars_data = locals()):
    rt = [var_name for var_name in vars_data if id(var) == id(vars_data[var_name])]
    return rt[0] if len(rt) == 1 else rt

def print_var(var, equal=" = "):
    from copy import copy
    var_val = copy(var)
    if isinstance(var_val, str): var_val = f"'{var_val}'"
    print(f"{var2str(var)}{equal}{var_val}")


Надо из строки "1, 43, qweqwe [123] = f" получить "[123]".
сделал так:
st = "1, 43, qweqwe [123] = f"

n_str = ''

for i, symb in enumerate(st):
    if symb == "[":
        for j in st[i:]:
            n_str += j
            if j == ']': 
                break

print_var(n_str)

работает, но если в строке несколько скобок то код просто их в одну строку засовывает. "1, 43, qweqwe [123] = [f]"=> "[123][f]". Не пойму как их разъединить (["[123]", "[f]"]). Попробовал так:

st = "1, 43, qweqwe [123] = [f]"

+n_str = {}

for i, symb in enumerate(st):
    if symb == "[":
        for j in st[i:]:
-           n_str[i] += j
            if j == ']': 
                break

print_var(n_str)

но тогда выходит ошибка KeyError (сверху на красной строке). Сделал так:
n_str[str(i)] += j - та же самая ошибка.
Так как их разъединить?
  • Вопрос задан
  • 745 просмотров
Решения вопроса 2
Maksim_64
@Maksim_64
Data Analyst
import re
pattern1 = r"\[([0-9]+)\]"
pattern2 = r'\[(.*?)\]'
st = "1, 43, qweqwe [123] = [f]"
result  = re.findall(pattern2,st)
print(result)


Если нужны только цифры внутри квадратных скобок используйте pattern1, если нужен любой текст внутри скобок используйте pattern2.
Ответ написан
Комментировать
@Jack444
get_values = lambda st: [i.split(']', 1)[0] for i in st.split('[')][1:]
st = "1, 43, qweqwe [123] = [f]"
print(get_values(st)) # ['123', 'f']
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы