Я пытаюсь получить некоторые данные из журналов в приложении. Журналы выглядят так:
*junk* [{count=240.0, state=STATE1}, {count=1.0, state=STATE2}, {count=93.0, state=STATE3}, {count=1.0, state=STATE4}, {count=1147.0, state=STATE5}, etc. ] *junk*
Если count для определенного состояния всегда равно 0, его фактически не будет в журнале вообще, поэтому я не могу гарантировать порядок объектов в журнале (единственное, что они отсортированы в алфавитном порядке по названию штата)
Итак, это также потенциальный журнал:
*junk* [{count=240.0, state=STATE1}, {count=1.0, state=STATE4}, {count=1147.0, state=STATE5}, etc. ] *junk*
Я немного новичок в использовании регулярных выражений и думаю, что переборщил с этим, но это то, что я пытался.
^[^=\n]*=(?:(?P<STATE1>\d+)(?=\.0,\s+\w+=STATE1))*.*?=(?P<STATE2>\d+)(?=\.0,\s+\w+=STATE2)*.*?=(?P<STATE3>\d+)(?=\.0,\s+\w+=STATE3)
Идея в том, что я буду искать ' = 'и затем посмотрите вперед, чтобы увидеть, если это для того состояния, которое я хочу, и оно может или не может быть там. Затем пропустите весь мусор после подсчета до следующего состояния, которое меня интересует ( это часть, с которой у меня возникают проблемы, я считаю ). Иногда это совпадает слишком далеко и пропускает интересующее меня состояние, давая мне плохую ценность. Если я использую ленивый оператор (как выше), иногда он не go достаточно далеко и получает счетчик для состояния , которое находится перед тем, который я хочу в журнале.