У меня есть 2 вида строк, которые нужно разбить на 3 группы с одним регулярным выражением
line1 = """NAME1;address;10461;427144.70;012020;244312:countername1::244312:countername2::244312:countername3::[!]:1:service1:410630.15:62:penny:16514.55:;1;"""
line2 = """NAME2;ADDRESS2;10458;1853.12;012020;[!]:1:service1:1853.12:62:penny:0.00:;1;"""
my_regex1 = r'^(?P<acc>.+;.+;.+;.+;.+);(?P<counters>.*:?.*):\[\!\]:(?P<services>.*):;1;$'
my_regex2 = r'^(?P<acc>.+;.+;.+;.+;.+);(?P<counters>.*:){0,}:?\[\!\]:(?P<services>.*):;1;$'
Результат первого регулярного выражения в строке1, как строки, в порядке, но в строке 2 он не работает как строки
re.findall(my_regex1, line1) >>>
[('NAME1;address;10461;427144.70;012020', '244312:countername1::244312:countername2::244312:countername3:', '1:service1:410630.15:62:penny:16514.55')]
но он вообще не перехватывает строку 2
2-е регулярное выражение разрывает строку 2, но завершается неудачно с блоком счетчиков в строке 1
re.findall(my_regex2, line2) >>> [('NAME2;ADDRESS2;10458;1853.12;012020', '', '1:service1:1853.12:62:penny:0.00')] #which s ok, but it fails with line2
re.findall(my_regex2, line1)
>>>
[('NAME1;address;10461;427144.70;012020','244312:countername1::244312:countername2::244312:countername3::','1:service1:410630.15:62:penny:16514.55')]
Мне нужно исправить регулярное выражение 2, чтобы он мог разбить все строки правильно, теперь происходит сбой с добавлением нежелательного символа «:» в конец блока. Блок счетчиков может вообще не существовать или иметь более 9 полей, но блок служб всегда будет существовать, но может быть любым длиной