PostgreSQL上的正则表达式POSIX问题

时间:2019-01-30 11:22:48

标签: regex postgresql posix-ere

我想删除几个单词的字符串中的所有2个字母单词。

我想出了这个解决方案:

SELECT regexp_replace('UN DE DA ','\s{1}[A-Z]{2}\s{1}',' ','g');

SELECT regexp_replace('UN DE DA ','^[A-Z]{2}\s{1}',' ','g');

SELECT regexp_replace('UN DE DA','[A-Z]{2}$',' ','g');

但是我想使用一个regexp_replace而不是三个 我测试了

SELECT regexp_replace('UN DE DA ','\s{1}[A-Z]{2}\s{1}|^[A-Z]{2}\s{1}|[A-Z]{2}$',' ','g');

但是它不起作用=>我仍然有DE

您真诚的 Loïc

1 个答案:

答案 0 :(得分:1)

假设您实际上要删除两个字母词,那么替换似乎应该是空字符串,而不是单个空格。我们可以尝试在模式上进行匹配:

\y[A-Z]{2}\y

这将匹配被单词边界包围的任何两个大写字母,其中包括空格或字符串的开头/结尾。

SELECT REGEXP_REPLACE('UN DE DA ', '\y[A-Z]{2}\y', '', 'g');

Demo

上面的查询返回三个空格,该空格留在原始字符串后面。