Неправильно отрабатыват шаблон textFSM, непонимаю где ошибка
Обрабатываю счета от операторов связи, в тексте множество строк вида
Абонент 79026297995 Профи (Салехард NEW)
Ежемесячные услуги
Абонплата 93,00 руб
Итого начисления 93,00 руб
Абонент 79026294403 Профи (Салехард NEW)
Начисления за вызовы
SMS/MMS 1253 шт 2 004,80 руб
Прочие звонки 5мин 0,00 руб
Итого начисления 2 004,80 руб
Абонент 79026290083 Профи (Салехард NEW)
Начисления за вызовы
Прочие звонки 205 мин 0,00 руб
Итого начисления 0,00 руб
файл шаблона:
Value ABON (\d+)
Value RUB (.+)
Start
^Абонент\s${ABON}
^Итого начисления\s${RUB}\sруб -> Record
на regex101 проверяю, первая строка однозначно определяет номер абонента, вторая сумму Итого но textFSM возвращает все строки с пустой суммой вида ['79924098795', '']
Ответы (1 шт):
Автор решения: Namerek
→ Ссылка
Будем считать это "фантазией на тему"
поскольку я не знаком с библиотекой
textFSMи не знаю конечной задачи то попробую решить задачу стандартнымre.
import re
text = """Абонент 79026297995 Профи (Салехард NEW)
Ежемесячные услуги
Абонплата 93,00 руб
Итого начисления 93,00 руб
Абонент 79026294403 Профи (Салехард NEW)
Начисления за вызовы
SMS/MMS 1253 шт 2 004,80 руб
Прочие звонки 5мин 0,00 руб
Итого начисления 2 004,80 руб
Абонент 79026290083 Профи (Салехард NEW)
Начисления за вызовы
Прочие звонки 205 мин 0,00 руб
Итого начисления 0,00 руб"""
dict(re.findall(r'Абонент (\d+).+?Итого начисления (.+?)(?=\n|\Z)', text, flags=re.S))
{'79026297995': '93,00 руб',
'79026294403': '2 004,80 руб',
'79026290083': '0,00 руб'}
или так
re.findall(r'Абонент (\d+).+?(\w.+?)\n.+?Итого начисления (.+?)(?=\n|\Z)', text, flags=re.S)
[('79026297995', 'Профи (Салехард NEW)', '93,00 руб'),
('79026294403', 'Профи (Салехард NEW)', '2 004,80 руб'),
('79026290083', 'Профи (Салехард NEW)', '0,00 руб')]