regex_replace,仅替换整个单词

时间:2019-08-26 14:02:15

标签: regex postgresql

我的PostgreSQL表中有以下行:

kpi_old
---------------------------------
Other operating exp (1200)
Other operating exp (1400)
Other operating exp (1600)
Other operating expenses 0 (1200)
Other operating expenses 0 (1400)
Other operating expenses 0 (1600)

我想替换:

  • Other operating exp => Other operating expenses & taxes
  • Other operating expenses 0 => Other operating expenses & taxes

我尝试了以下操作:

SELECT
"kpi_old",
regexp_replace("kpi_old", '(Other operating exp)','Other operating expenses & taxes') as "kpi_new"

问题是,它返回以下内容:

Other operating expenses & taxes (1200)
Other operating expenses & taxes (1400)
Other operating expenses & taxes (1600)
Other operating expenses & taxesenses 0 (1200)
Other operating expenses & taxesenses 0 (1400)
Other operating expenses & taxesenses 0 (1600)

我可以使用哪个正则表达式替换字符串中的完全匹配项?

2 个答案:

答案 0 :(得分:1)

使用可选组(enses)?

=# select regexp_replace('Other operating expenses 0 (1600)', '(Other operating exp(enses)?)', 'Other operating expenses & taxes');
              regexp_replace               
-------------------------------------------
 Other operating expenses & taxes 0 (1600)
(1 row)

=# select regexp_replace('Other operating exp (1600)', '(Other operating exp(enses)?)', 'Other operating expenses & taxes');
             regexp_replace              
-----------------------------------------
 Other operating expenses & taxes (1600)

答案 1 :(得分:1)

使用涵盖以下两种情况的模式:

SELECT regexp_replace(
          kpi_old,
          'Other operating exp(enses 0)?',
          'Other operating expenses & taxes'
       )
FROM mytab;

             regexp_replace              
-----------------------------------------
 Other operating expenses & taxes (1200)
 Other operating expenses & taxes (1400)
 Other operating expenses & taxes (1600)
 Other operating expenses & taxes (1200)
 Other operating expenses & taxes (1400)
 Other operating expenses & taxes (1600)
(6 rows)