Регулярные выражения (REGEXP_REPLACE). Удалить повторяющиеся числа из строки

Flukky
Дата: 28.10.2015 16:48:17
Добрый день!

Буду благодарен за совет, как удалить повторяющиеся числа из строки с помощью только REGEXP_REPLACE:
'TEST 123 123 456' -- привести к виду 'TEST 123 456'
'TEST 123 456 123 456 456' -- привести к виду 'TEST 123 456 123 456'
'TEST 123/123/456' -- привести к виду 'TEST 123 456'
'TEST 123-123-456' -- привести к виду 'TEST 123 456'


Спасибо за советы!
Sayan Malakshinov
Дата: 28.10.2015 17:06:20
Flukky,

то есть разделители тоже надо менять на пробелы?
Sayan Malakshinov
Дата: 28.10.2015 17:07:34
Flukky,

regexp_replace(s,'(\d+)\D(\1)?\D?','\1 ')
Flukky
Дата: 28.10.2015 17:08:43
Менять ли разделители - это не принципиально. Хотел добавить, что повторяющиеся слова (не числа) заменять не нужно, т.ч. такая конструкция не подойдёт:
SELECT REGEXP_REPLACE('TEST TEST 123 123 456', '([^ ]+) \1+', '\1')
FROM DUAL;
-- 'TEST 123 456'
Elic
Дата: 28.10.2015 17:09:02
RTFM backreference
Flukky
Дата: 28.10.2015 17:09:54
xtender
Flukky,

regexp_replace(s,'(\d+)\D(\1)?\D?','\1 ')


Большое спасибо за помощь!
уточню вопрос
Дата: 28.10.2015 17:14:13
xtender
то есть разделители тоже надо менять на пробелы?
один? или все*
Flukky
Дата: 28.10.2015 17:58:09
Последовав примеру и совету Elic сделал так:
WITH test_string AS (
    SELECT '1/2/KEY KEY/KEY/MAY 111 111----222\222/111///111 333 333 333' AS val FROM DUAL
)
  SELECT REGEXP_REPLACE(test_string.val,'([[:digit:]]{1,})([[:space:]]|[[:punct:]]){1,}\1','\1')
  FROM test_string;
  -- '1/2/KEY KEY/KEY/MAY 111----222/111 333 333'


Правда, в данном случае, если кол-во одинаковых строк подряд было 3, в результате остаются 2 одинаковых строки.
Elic
Дата: 28.10.2015 18:04:12
Flukky
'...([[:space:]]|[[:punct:]]){1,}\1'
'...([[:space:][:punct:]]+\1)+'