Извлечение символов с 12 — го по 14-й из длинного сильного, используя ТОЛЬКО переменную regex-Grafana

#regex #grafana #grafana-variable

Вопрос:

У меня небольшая проблема, я пытаюсь получить определенные символы из длинной строки с помощью регулярного выражения, но у меня возникли проблемы.

Рабочий процесс

Прометей —> Графана —>> Переменная (с использованием регулярного выражения)

Я не могу использовать ничего, кроме выражений регулярных выражений, для достижения этого результата

В настоящее время я использую это выражение, чтобы захватить длинную строку из некоторого вывода json:

 .*channel_id="(.*?)".*
 

ИЗ ЭТОГО

 {account_id="XXXXXXX-xxxx-xxxx-xxxx-xxxxxxxxxx",account_name="testalpha",channel_id="s0022110430col0901241usa",channel_abbr="s0022109430col} 
 

Это возвращает строку, которая ВСЕГДА содержит 24 символа:

 s0022110430col0901241usa
 

проблема:

Мне нужно захватить 3 буквы «col» и «сша», поскольку это две команды, которые играют, в идеале я мог бы передать результаты из первого регулярного выражения, чтобы получить эти значения (позиция является ключевой, так как первое значение ВСЕГДА будет 12-14 символов, а второе значение-последние 3 символа), если бы я мог вывести эти значения в верхнем регистре со строкой » vs » между ними, чтобы создать строку, такую как:

COL против США

или

АРГ против БЮСТГАЛЬТЕРА

Я открыт для любых предложений, которые могут у кого-либо возникнуть

Спасибо!

PS — Прописная буква «приятно иметь», НО не нужна

Комментарии:

1. Итак, исходя из этого: channel_id="s0022110430col0901241usa" единственное, что имеет значение, — это позиция col и usa ?

2. Правильно! @ЛомбардиД

Ответ №1:

Я все еще изучаю регулярные выражения, так что это все, что я мог придумать:

Для col (первой команды):

 (?<=(channel_id=".{11}))w{3}
 

Для usa (второй команды):

 (?<=(channel_id=".{21}))w{3}
 

Комментарии:

1. (Насколько я знаю) — вам нужно будет найти какой-то другой способ добавить «vs» в вывод, но вы можете записать их в верхнем регистре, используя только регулярное выражение

Ответ №2:

Можете ли вы определить идентификатор канала?

Оно начинается с «s», а затем идет много чисел. Если они всегда являются числами, вы можете использовать это регулярное выражение:

 channel_id=".[0-9] ([a-z] )[0-9] ([a-z] )
 

Вы получите 2 группы, одну с «col», а другую с «США».

Редактировать: Или если вы просто знаете, что у вас всегда один и тот же размер, вы можете использовать что-то вроде:

 channel_id=".{11}([a-z] ).{7}([a-z] )
 

Комментарии:

1. Ради здравомыслия я бы использовал» «, а не»*»

2. Спасибо. Я заменил его на