Регулярное выражение Oracle - удалить пробел между буквенными токенами длины 1 в строке

Версия Оракула: 11.2

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

Требование: Удалите пробел между буквенными токенами длины 1 в строке.

Пример 1:

"The I B M Corporation N Y US" 

... должен быть преобразован в:

"The IBM Corporation NY US"

Пример 2:

"The P N CD FUND of J P R M"

... должен быть преобразован в:

"The PN CD FUND of JPRM"

person Jai    schedule 04.11.2015    source источник


Ответы (2)


Кажется, это работает для ваших примеров:

SELECT regexp_replace('The I B M Corporation N Y US', '([[:alpha:]]{2} [[:alpha:]]{1,1}) | ([[:alpha:]]{1,1})( [[:alpha:]]{2})| ([[:alpha:]]{1,1}$)| ([[:alpha:]]{1,1}) ', '\1\2\3\4\5') as eg_1,
       regexp_replace('The P N CD FUND of J P R M', '([[:alpha:]]{2} [[:alpha:]]{1,1}) | ([[:alpha:]]{1,1})( [[:alpha:]]{2})| ([[:alpha:]]{1,1}$)| ([[:alpha:]]{1,1}) ', '\1\2\3\4\5') as eg_2
  FROM dual;

Я использовал эту страницу, чтобы помочь: regexp_replace

Я надеюсь, что это поможет вам!

person Ollie    schedule 05.11.2015

К сожалению, я не знаю синтаксиса регулярного выражения Oracle, но если у вас есть возможность переводить регулярное выражение в другое, то это делает то, что вы хотите, если используется с функцией метода Regex.Replace() в С#.

(?<=\s\w)\s(?!\w{2,})
person Sebastian 506563    schedule 05.11.2015