Postrgres 正则表达式替换字符串的一部分

问题描述 投票:0回答:2

是否有一个正则表达式可以在更新语句中使用来替换字符串的一部分?

我有一行在所有行中都具有一致的字符串,因此我正在寻找一个正则表达式模式来查找特定模式并替换它?例如,假设我有一个具有以下值的列行:

{
  "test": "Some Value"
  ....
}

我本质上寻找的是将任何内容与“测试”相匹配:并将其替换为我给出的任何内容(例如,“测试”:“其他值”)

postgresql
2个回答
1
投票

您可以使用:

regexp_replace(text1, '("test":\s*")(([^"]|\\")*)(")', '\1' || 'other value' || '\4' , 'g')

但是,警告!正则表达式替换“test”的内部出现:值。

备注:

  1. \" 里面的字符串就可以了!
  2. 无法检测内部发生情况
  3. & 是正则表达式的捕获,在这种情况下,您可以直接输入 '"test": ' 代替 ' ' 和 '"' 代替 ' '。但是 比较通用

一个完整的例子:

drop table if exists example;

create table example(json1 json, text1 text);

insert into example (json1, text1) values (
  '{"in":{"test": "inner"}, "test": "outer", "other": "some"}',
  '{"in":{"test": "inner"}, "test": "outer", "other": "some"}'
);

insert into example (json1, text1) values (
  '{"in":{"test": "inner \"no\""}, "test": "outer \"yes\"", "other": "some"}',
  '{"in":{"test": "inner \"no\""}, "test": "outer \"yes\"", "other": "some"}'
);

select * from example;

select regexp_replace(text1, '("test":\s*")(([^"]|\\")*)(")', '\1' || 'other value' || '\4' , 'g')
  from example;

如果您使用 postgres 9.4,您可以对列使用 json 或 jsonb 类型


0
投票

如果您尝试从名称列中删除特殊字符和数字并且只想:

字母表 点 (.)(保留卡兰先生、迪帕克博士等名字) 空格(如果您要连接名字和姓氏列,或者连接 Karan Ahuja、Deepak Patil 等全名,则非常有用),

您可以使用以下 PostgreSQL 查询: REGEXP_REPLACE("NAME", '[^a-zA-Z.\s]', '', 'g') AS "NAME"

以下是如何构建它:

大家好

如果您尝试从名称列中删除特殊字符和数字并且只想:

字母表 点 (.)(保留卡兰先生、迪帕克博士等名字) 空格(如果您要连接名字和姓氏列,或者连接全名,例如 Karan Ahuja、Deepak Patil,则非常有用), 您可以使用以下 PostgreSQL 查询:

REGEXP_REPLACE("NAME", '[^a-zA-Z.\s]', '', 'g') AS "NAME"

示例: 原始名称 处理后的名称 卡兰先生123! 卡兰先生 迪帕克博士@!帕蒂尔 迪帕克·帕蒂尔博士 卡兰**&%$ Ahuja123 卡兰阿胡贾 此查询会删除任何不需要的字符,同时保留所需的格式。

© www.soinside.com 2019 - 2024. All rights reserved.