Cdhippen
Cdhippen

Reputation: 655

How to match strings of only a specific length of characters in regex? (Python)

I'm using

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

to search these fields:

[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.

But I only want it to match the dates, not the other stuff that's between brackets as well as assign a named group 'code'(that parts working). I tried several variations including

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

But I can't seem to get it to find anything with those criteria.

Bonus: I might be able to figure this one out once the rest is solved, but I might as well ask while I'm in here. How do I update a dictionary with the date and code as a key value pair?

Upvotes: 0

Views: 83

Answers (1)

Srdjan M.
Srdjan M.

Reputation: 3405

Regex: \d{4}(?:-\d{2}){2}[^]]+|(?<=Response code )(?P<code>\d+)

Details:

  • (?:) Non-capturing group
  • {n} Matches exactly n times
  • [^] Named Capture Group
  • | Or
  • (?<=) Positive Lookbehind
  • (?P<>) Named Capture Group

Python code:

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

Output:

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

Code demo

Upvotes: 1

Related Questions