替换空格,但在Postgres中最后一次出现除外

时间:2018-01-11 10:22:40

标签: sql regex postgresql

我需要从字符串中替换空格而不是最后一次出现。我尝试了一些正则表达式,但没有找到解决方案。

我的字符串类似'ABCD;140 0 0 EUR;350 0 0 0 EUR',我需要将其设为ABCD;14000 EUR;350000 EUR'

我尝试了以下方式

select regexp_replace('ABCD;14000 EUR;350 0 0 0 EUR', '\s[^EUR]', '','g');

ABCD;14000 EUR;350 EUR
select regexp_replace('ABCD;14000 EUR;350 0 0 0 EUR', '\s', '', 'g');

ABCD;14000EUR;350000EUR

任何建议或帮助?

-Neelesh

2 个答案:

答案 0 :(得分:1)

看来你想删除所有未跟随<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <table style="width:100%"> <tr class="click"> <th>Click</th> <th>Click</th> <th class="noclick">Nothing should happen here</th> </tr> </table>的空白字符(或任何由3个大写字母组成的单词)作为整个单词(货币缩写)。

使用

EUR

请参阅online demo

<强>详情

  • select regexp_replace('ABCD;140050 EUR;350000 EUR', '\s+(?![[:upper:]]{3}\y)', '\1','g'); - 一个或多个空格......
  • \s+ - 没有立即跟随3个大写字母,后面没有单词char((?![[:upper:]]{3}\y)是单词边界,\y在这里是等价的,因为它匹配单词的结尾位置)。

请注意,\M将删除(?![[:upper:]]{3}\y)之前的所有空格。如果您想在EUR之前保留所有空白字符,请使用EUR模式。

enter image description here

答案 1 :(得分:0)

您可以替换以下数字中的所有空格:

select regexp_replace('ABCD;14000 EUR;350 0 0 0 EUR', '\s+(\d)', '\1','g');

结果:

ABCD;14000 EUR;350000 EUR

'\s+(\d)'匹配后跟数字的所有空格,'\1'是找到的数字。