При таком подходе верхняя строка находит все, чтобы получить все трехбуквенные сокращения вместе с цифрами c значений / диапазонов. Затем он использует понимание списка в сочетании с zip
и dict
для создания нужного словаря.
inp = "ABC costs 40000-50000 dollars; the price of car DEF is 45600-80000, HIJ only needs 30000USD"
matches = re.findall(r'\b[A-Z]{3}\b|\d+(?:-\d+)?', inp)
print(matches)
map_out = dict(zip([matches[i] for i in range(0, len(matches), 2)],
[matches[i] for i in range(1, len(matches), 2)]))
print(map_out)
Это печатает:
['ABC', '40000-50000', 'DEF', '45600-80000', 'HIJ', '30000']
{'HIJ': '30000', 'ABC': '40000-50000', 'DEF': '45600-80000'}