替换字母之间的点 [ORACLE]

Replacing dots between letters [ORACLE]

我有一个包含点的字符串。

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

我需要用 space 将点替换为点,但前提是点前有字母,点后有字母。在所有其他情况下,不得替换点。

我可以用 regexp_replace 做这个吗?

结果必须是这样的:

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

我正在尝试使用这个:

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

您可以使用这个正则表达式:

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

寻找一个字符,一个或多个点,然后是另一个字符,并将其替换为

 

即第一个字符、点、space 和第二个字符。在 Oracle 中(注意 i 标志的使用,因此我们不必指定 [A-Za-z] 而只是 [a-z]):

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

输出:

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

Demo on dbfiddle