regex - 在 Postgresql 中用大写版本替换正则表达式匹配的文本

标签 regex postgresql replace

给定一个字符串,其中某些单词被星号包围,例如

The *quick* *brown* fox jumped over the *lazy* dog

你能把被星号包围的单词转换成大写版本吗,即

QUICK BROWN 狐狸跳过了 LAZY 狗

给定“句子”表中“句子”列中的文本,我可以按如下方式标记/提取单词:

SELECT regexp_replace(sentence,'\*(.*?)\*','STARTUPPER\1ENDUPPER','g') FROM sentences;

但是我第一次尝试大写转换没有成功:

select regexp_replace(sentence,'\*(.*?)\*','' || upper('\1'),'g') from sentences;

我想在用开始和结束标记替换星号后使用 substring() 拆分部分,但如果加星号的单词不止一个,那将失败。

最佳答案

您可以像这样创建一个 PL/pgSQL 函数:

CREATE FUNCTION upper_asterisk(inp_str varchar)
RETURNS varchar AS $$
DECLARE t_str varchar;
BEGIN

  FOR t_str IN (SELECT regexp_matches(inp_str,'\*.+\*','g'))
  BEGIN
    inp_str := replace(inp_str, t_str, upper(t_str));
  END;

  RETURN inp_str;
END;
$$  LANGUAGE plpgsql;

(尚未测试,可能有错误)。

或者使用任何可用的语言在数据库中编写这样的函数。

关于regex - 在 Postgresql 中用大写版本替换正则表达式匹配的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18698760/

相关文章:

ruby - 字符串匹配(正则表达式)与正则表达式匹配(字符串)

javascript - Tampermonkey 匹配所有子目录

javascript - 满足特定要求的密码正则表达式

sql - 用另一个数据库中的数据替换数据库的所有表,除了一个

postgresql - 如何在 psql 脚本中使用变量

sql - Postgres 进程的高 CPU 使用率

JavaScript 字符串replace()在替换变量时不起作用

javascript - 查找并替换特定字符串

C# 字符串安全替换

javascript - 正则表达式替换非数字