regexp_replace 在 postgres 中只保留需要的单个 space

regexp_replace in postgres keep only desired with single space

我想要的是像这样转动一个字符串;

10 - 15 st. pan,cras

10 - 15 ST PANCRAS

我用

完成了大部分工作
 `select upper(regexp_replace('10  -  15 st.  pan,cras', '[^a-zA-Z 0-9-]', '', 'g'));`

但我似乎无法删除数字周围的双 space。我试过了,在表达式中添加了一个额外的 space;

 `select upper(regexp_replace('10  -  15 st.  pan,cras', '[^a-zA-Z  0-9-]', '', 'g'));`

但结果没有区别。我正在使用 regexp_replace,因为我发现 substring 语法更难理解。在 9.6 中,字符串存储在 text

您可以将 space collapsing 添加到一个表达式中,如下所示:

t=# select regexp_replace('q            q','( ){1,}',' ','g');
 regexp_replace
----------------
 q q
(1 row)

如果发现一个或多个连续space,则替换为单个space。

所以在你的情况下会是

t=# select regexp_replace(upper(regexp_replace('10  -  15 st.  pan,cras', '[^a-zA-Z 0-9-]', '', 'g')),'( ){1,}',' ','g');
   regexp_replace
--------------------
 10 - 15 ST PANCRAS
(1 row)