Как сопоставить строки только определенной длины символов в регулярном выражении? (Python)

Я использую

\[(.*?)\]|Response code (?P<code>\d+)

искать в этих полях:

[2018-01-20 05:19:54.812] INFO    com.mulesoft.ch.monitoring.MonitoringCoreExtension [qtp689806602-32]: Monitoring enabled: true
[2018-01-20 05:19:54.813] INFO    com.mulesoft.ch.monitoring.MonitoringCoreExtension [qtp689806602-32]: Registering ping flow injector...
[2018-01-20 05:19:54.833] INFO    com.mulesoft.ch.queue.boot.PersistentQueueCoreExtension [qtp689806602-32]: The PersistentQueueManager is NOT configured. The normal VM queue manager will be used.
[2018-01-20 05:19:54.841] INFO    org.mule.lifecycle.AbstractLifecycleManager [qtp689806602-32]: Initialising RegistryBroker
[2018-01-20 05:19:54.872] INFO
[2018-01-24 02:14:30.153] INFO    org.mule.routing.SynchronousUntilSuccessfulProcessingStrategy [[swt-fastsalescomp-anaplan-schedules].ScatterGatherWorkManager.24]: Exception thrown inside until-successful org.mule.module.http.internal.request.ResponseValidatorException: Response code 503 mapped as failure.

Но я только хочу, чтобы он соответствовал датам, а не другим вещам, заключенным в скобки, а также назначил именованную группу 'code'(чтобы части работали). Я попробовал несколько вариантов, включая

\[(\d*?)\]
\[(\W*?)\]
\[^(\.*?){23}$\]

Но я не могу заставить его найти что-то по этим критериям.

Бонус: я мог бы понять это, когда все остальное будет решено, но я мог бы также спросить, пока я здесь. Как обновить словарь с датой и кодом в качестве пары ключ-значение?

1 ответ

Решение

Регулярное выражение: \d{4}(?:-\d{2}){2}[^]]+|(?<=Response code )(?P<code>\d+)

Подробности:

  • (?:) Non-capturing group
  • {n} Точно соответствует n раз
  • [^] Named Capture Group
  • | Или же
  • (?<=) Позитивный взгляд сзади
  • (?P<>) Named Capture Group

Код Python:

for match in re.finditer(r'\d{4}(?:-\d{2}){2}[^]]+|(?<=Response code )(?P<code>\d+)', text):
    print(match.group())

Выход:

2018-01-20 05:19:54.812
2018-01-20 05:19:54.813
2018-01-20 05:19:54.833
2018-01-20 05:19:54.841
2018-01-20 05:19:54.872
2018-01-24 02:14:30.153
503

Код демо

Другие вопросы по тегам