Как обрезать результаты совпадения подстроки с регулярным выражением? - PullRequest
0 голосов
/ 13 апреля 2011

У меня есть этот набор данных в postgresql:

en_MY_V2_CID_MY_SEM_1_1_0_0
en_MY_V2_CID_MY_SEM_2_101_1703_0
en_MY_V2_CID_MY_SEM_2_101_1724_0
en_MY_CID_MY_DIS_1_100_1705_0068
en_MY_CID_MY_DIS_1_100_1705_0068

Я хочу извлечь подстроку так:

en_MY_V2_CID_MY_SEM_1
en_MY_V2_CID_MY_SEM_2
en_MY_V2_CID_MY_SEM_2
en_MY_CID_MY_DIS_1
en_MY_CID_MY_DIS_1

Проблема в том, что левая структура не постоянна, поэтому я не могу понять их с помощью регулярных выражений. Вместо этого правая структура имеет постоянную в формате _numbers_numbers_numbers_numbers. Поэтому я пытаюсь использовать этот запрос в postgresql:

select substring(name from '_\d+_\d+_\d+$') from logs;

И получите:

1_0_0
101_1703_0
101_1724_0
100_1705_0068
1705_0068

Итак, вопрос в том, как отменить или обрезать предыдущую подстроку, чтобы получить результаты?

1 Ответ

3 голосов
/ 13 апреля 2011

Использовать rexep_replace

select regexp_replace(name,E'\(\\w\)_\\d+_\\d+_\\d+$',E'\\1') from logs;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...