Регулярное выражение не соответствует, когда добавлено больше символов - PullRequest
2 голосов
/ 20 октября 2019

Строка 1: STARTRequestId:b4114e7d-a3e1-42c9-8104-87c3444757f8Version:$LATESTENDRequestId:b4114e7d-a3e1-42c9-8104-87c3444757f8REPORTRequestId:b4114e7d-a3e1-42c9-8104-87c3444757f8Duration:301.78msBilledDuration:400msMemorySize:256MBMaxMemoryUsed:85MBInitDuration:258.30ms

Строка 2: STARTRequestId:462e68f9-346f-48c0-8592-762f78e84010Version:$LATESTENDRequestId:462e68f9-346f-48c0-8592-762f78e84010REPORTRequestId:462e68f9-346f-48c0-8592-762f78e84010Duration:108.69msBilledDuration:200msMemorySize:128MBMaxMemoryUsed:85MB

Между строкой 1 и строкой 2 добавляется InitDuration:258.30ms

I 'Я пытаюсь откорректировать вышеприведенный вывод, в настоящее время у меня есть:

/Duration:(?<actualTime>(?!.*\..*\.)[.\d]+)msBilledDuration:(?<billedTime>(?!.*\..*\.)[.\d]+)msMemorySize:(?<memorySize>(?!.*\..*\.)[.\d]+)MB/

Вышеприведенные совпадения в строке 2, но в строке 1 ... Однако при добавлении InitDuration:258.30ms (Строка 1) регулярное выражение не удается и не находит никаких результатов. Мне НЕ нужен дополнительный матч, моя цель - поддерживать actualTime, billedTime и memorySize независимо от того, существует ли остальное.

1 Ответ

1 голос
/ 20 октября 2019

Ваш шаблон не совпадает с первой строкой из-за отрицательного взгляда (?!.*\..*\.)

Отрицательный прогноз утверждает, что справа не содержится 2 точки, которые потерпят неудачу для первой строки, потому что есть 301.78 и 258.30ms.

Это будет соответствовать для второй строки, потому что есть только одно значение 108.69, которое содержит точку.

Если вы хотите поддерживать только фактическое время, то billedTimeи размер памяти вы можете опустить взгляд. Чтобы предотвратить сопоставление точки только с помощью [.\d]+, можно сопоставить цифры с необязательной десятичной частью \d+(?:\.\d+)?

Шаблон может выглядеть следующим образом:

Duration:(?<actualTime>\d+(?:\.\d+)?)msBilledDuration:(?<billedTime>\d+(?:\.\d+)?)msMemorySize:(?<memorySize>\d+(?:\.\d+)?)MB

Regex demo

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...