如何修剪子串与正则表达式匹配的结果?

时间:2011-04-13 09:27:33

标签: regex postgresql

我在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 个答案:

答案 0 :(得分:3)

使用rexep_replace

select regexp_replace(name,E'\(\\w\)_\\d+_\\d+_\\d+$',E'\\1') from logs;