Как сопоставить строки только определенной длины символов в регулярном выражении? (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