如何在Oracle regexp_replace中通过正则表达式从逗号分隔列表中删除重复项?

时间:2014-10-31 10:18:55

标签: regex oracle

我有

'VA - HRD 1, VA - HRD 1, VA - NOVA 1, VA - NOVA 1'

想要

'VA - HRD 1, VA - NOVA 1'

我正在尝试

regexp_replace( 'VA - HRD 1, VA - HRD 1, VA - NOVA 1, VA - NOVA 1' ,'([^,]+)(,\1)+', '\1')

但它不会删除所有重复项,而是会产生:VA - HRD 1, VA - HRD 1, VA - NOVA 1

请帮忙......

2 个答案:

答案 0 :(得分:8)

([^,]+)(,[ ]*\1)+

试试这个。这很有效。见演示。

http://regex101.com/r/yG7zB9/8

问题是VA - HRD 1, VA - HRD 1

                     ^  ^

这里的空间。你没有考虑到这一点,因为第一场比赛没有任何空格,所以。所以inlcde [ ]*\s*让它接受。

答案 1 :(得分:1)

Select replace(REGEXP_REPLACE('1234567890,2220006789,2220006789,477-000-6789','([^,]+)(,[ ]*\1)+'),',,',',') 
As [columnName] From [tableName]