Как регулярным выражением достать нужную информацию?
У меня есть несколько строк в таких форматах:
"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]) # В чем проблема сделать просто срез или я что не понял в вопросе