Замена точек между буквами [ORACLE] - PullRequest
1 голос
/ 11 ноября 2019

У меня есть строка, которая содержит точки.

select 'String.Cont.ains 123.FD DF.123 11.11' str from dual

Мне нужно заменить точки на точки пробелом, но только когда буква находится перед точкой, а буква - после точки. Во всех других случаях точка не должна заменяться.

Могу ли я сделать это с regexp_replace?

Результат должен быть таким:

String. Cont. ains 123.FD DF.123 11.11

I'mпытаясь использовать это:

select regexp_replace('String.Cont.ains 123.FD DF.123 11.11','(\.){1,}','. ')from dual

1 Ответ

3 голосов
/ 11 ноября 2019

Вы можете использовать это регулярное выражение:

([a-z])(\.+)([a-z])

, которое ищет символ, одну или несколько точек, а затем другой символ и заменяет его на

\1\2 \3

, т. Е. Первый символ, точки, пробел и второй символ. В Oracle (обратите внимание на использование флага i, поэтому нам не нужно указывать [A-Za-z] вместо просто [a-z]):

SELECT 
REGEXP_REPLACE('String.Cont.ains 123.FD DF.123 11.11', '([a-z])(\.+)([a-z])', '\1\2 \3', 1, 0, 'i') AS new
FROM dual

Вывод:

NEW
String. Cont. ains 123.FD DF.123 11.11

Демонстрация на dbfiddle

...