仅当整个单词都是大写字母时,如何从 Postgresql 中的字符串中提取大写单词

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

仅当整个单词都是大写字母时,我才尝试从表中的列中提取单词(我试图在列中查找所有首字母缩略词)。我尝试使用以下代码,但它给了我一个字符串中的所有大写字母,即使它只是一个单词的第一个字母。

SELECT title, REGEXP_REPLACE(title, '[^A-Z]+', '', 'g') AS acronym
FROM table;

这是我想要的输出:

标题 缩写词
我会尽快离开 尽快
大卫·詹姆斯大声笑 哈哈
顺便说一句,我回家了 顺便说一句
今天请回复 回复邀请
postgresql substring extract uppercase
2个回答
0
投票

你可以使用这个正则表达式:

regexp_replace(title, '.*?\m([[:upper:]]+)\M.*', '\1 ', 'g')
  • .*?
    匹配任意字母是一种非贪婪的时尚
  • \m
    匹配单词的开头
  • (
    是我们感兴趣的部分的开始
  • [[:upper:]]*
    是任意多个大写字符
  • )
    是我们感兴趣的部分的结尾
  • \M
    匹配单词的结尾
  • .*
    匹配任意字符
  • \1
    引用括号内的部分

0
投票

你可以试试 REGEXP_MATCHES 函数

WITH data AS 
          (SELECT 'I will leave ASAP' AS title  
UNION ALL SELECT 'David James is LOL' AS title
UNION ALL SELECT 'BTW I went home' AS title
UNION ALL SELECT 'Please RSVP today' AS title)
SELECT title, REGEXP_MATCHES(title, '[A-Z][A-Z]+', 'g') AS acronym
FROM data;

看演示在这里

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