1. Допустим, мы хотим поймать всё, что находится между символами {## и ##}. Как будет выглядеть регулярное выражение?
Нам всё равно, какие символы будут встречаться внутри, поэтому можно поставить точку — произвольный символ. Пусть этот символ будет повторяться произвольное число раз — добавляем звёздочку. Нам надо поймать всё, что находится между {## и ##} — добавляем круглые скобки, чтобы обозначить границы группы:
{## (.*) ##}
Можно немного изменить это регулярное выражение, например, поставить знак "+" вместо звёздочки — это будет означать, что произвольный символ должен встретиться хотя бы один раз (звёздочка означает, что он может встретиться ноль или более раз).
2. Как использовать это регулярное выражение?
Можно применять его к каждой строке файла по очереди. А можно применить ко всему файлу целиком, если он небольшой.
Допустим, мы считываем весь файл в одну строковую переменную:
with open('input.txt', 'r') as f:
text = f.read()
Тогда мы можем вытащить из него сразу всё, что нас интересует:
import re
pattern = "{## (.*) ##}"
result = re.findall(pattern, text)
Результатом будет список строк вида
['bonus:DS',
'bang:fm,bv',
'zf:123,230',
'zf1:349,410',
... ]
Здесь каждую строку можно разбить на две:
s = 'bonus:DS'
s.split(':') # получаем ['bonus', 'DS']
— и дальше действовать как потребуется.
3. Что получится, если включить двоеточие сразу в регулярное выражение?
Чтобы обойтись без использования split(), можно изначально включить двоеточие в наше регулярное выражение:
pattern = "{## (.*):(.*) ##}"
Результатом будет список кортежей:
[('bonus', 'DS'),
('bang', 'fm,bv'),
('zf', '123,230'),
('zf1', '349,410'),
... ]
4. Как собирать различные структуры данных с нуля?
Примеры того, как можно собрать с нуля списки, словари и кортежи. Все примеры легко проверить в командной строке.
Списки:
list = []
list.append('a')
Пары ключ-значение (словари):
d = dict()
d['a'] = '123'
Кортежи:
x = '123'
y = '456'
tuple = (x, y)
По идее, этой информации должно быть достаточно, чтобы вы смогли разобраться в путях решения задачи. Удачи!