给定一个字符串,其中某些单词被星号包围,例如
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/