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)
我想要的是像这样转动一个字符串;
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)