Как регулярным выражением достать нужную информацию?

У меня есть несколько строк в таких форматах:

"some text ({asdf-13f-fasdf})" и "some text [new info {assf-13f-fdasdf}]"

Я получаю данные в таком виде ({asdf-13f-fasdf}), а мне нужно именно содержимое, а не скобки.

Пример: asdf-13f-fasdf

Код:

import re

text = "some text ({asdf-13f-fasdf})"

test = re.search('some text (\(.*?)\)', text)
print(test.group(1))

Результат: ({asdf-13f-fasdf}


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

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

Я получаю данные в таком виде ({asdf-13f-fasdf}), а мне нужно именно содержимое, а не скобки.

Чтобы фигурные скобки не захватывало, нужно добавить круглые скобки

Попробуйте:

import re

text = """
some text ({asdf-13f-fasdf})
и
some text [new info {DEAD-13f-fdasdf}]
"""

print(re.findall(r'{(.+?)}', text))
# ['asdf-13f-fasdf', 'DEAD-13f-fdasdf']

m = re.search('{(.+?)}', text)
print(m.group(1))
# asdf-13f-fasdf

UPD.

Обработка текстового файла построчно:

with open("log.txt", encoding='utf-8') as f:
    for line in f:
        m = re.search('{(.+?)}', line)
        print(m.group(1))

Если уже есть строка с кучей строк, то используйте у нее метод splitlines:

with open("log.txt", encoding='utf-8') as f:
    text = f.read()
    for line in text.splitlines():
        ...
→ Ссылка
Автор решения: FotonPC

А срез нельзя сделать?

import re

text = "some text ({asdf-13f-fasdf})"

test = re.search('some text (\(.*?)\)', text)
print(test.group(1)[2:-2]) # В чем проблема сделать просто срез или я что не понял в вопросе
→ Ссылка