#regex #grafana #telegraf
Вопрос:
Можно ли получить результат только с первыми двумя цифрами без % в первой группе. Я использую Телеграф с Графаной.
Пример:
5 Secs ( 22.3463%) 60 Secs ( 25.677%) 300 Secs ( 21.3522%)
Результат:
22
Я нашел это регулярное выражение в аналогичной теме, но для меня это плохой формат :
^s*d s Secss*(s*(d (?:.d )?%))s d s Secss (s (d (?:.d )?%))s d s Secss (s (d (?:.d )?%))$
Комментарии:
1. Какой вариант регулярных выражений вы используете (python, javascript, какое-то конкретное программное обеспечение)? Группировка работает значительно по-разному в каждом конкретном случае, так же как и другие функции, такие как обратные ссылки и ссылки
Ответ №1:
Вы можете обновить шаблон, чтобы использовать одну группу захвата, переместив скобки вокруг цифр только для первого вхождения.
Вы можете опустить вторую и третью группы захвата, так как они вам не нужны.
^s*d s Secss*(s*(d )(?:.d )?%)s d s Secss (s d (?:.d )?%)s d s Secss (s d (?:.d )?%)$
^ ^
Демонстрация регулярных выражений
Или вы можете использовать именованную группу захвата, например digits
^s*d s Secss*(s*(?P<digits>d )(?:.d )?%)s d s Secss (s d (?:.d )?%)s d s Secss (s d (?:.d )?%)$
Ответ №2:
С показанными вами образцами, пожалуйста, попробуйте следовать регулярному выражению.
^d s Secss (s (d )(?:.d %)?)(?:s d s Secss (s d (?:.d )?%))*
Онлайн-демонстрация для приведенного выше регулярного выражения
Пояснение: Добавление подробного объяснения вышеизложенного.
^d s Secss (s ##From starting of value matching digits(1 or more occurrences) followed by space(s) Secs spaces ( spaces.
(d ) ##Creating 1st and only capturing group where we have digits in it.
(?:.d %)?) ##In a non-capturing group matching dot digits % ) keeping it optional followed by )
(?: ##Creating a non-capturing group here.
s d s Secss (s d ##matching spaces digits spaces Secs spaces ( spaces digits
(?:.d )? ##In a non-capturing group matching dot digits keeping it optional.
%) ##matching % followed by ) here.
)* ##Closing very first non-capturing group, and matching its 0 or more occurrences.
Ответ №3:
Если бы вы искали только 1-е событие, разве не сработало бы следующее?
/secss*(s*(d )/i