仅当整个单词都是大写字母时,我才尝试从表中的列中提取单词(我试图在列中查找所有首字母缩略词)。我尝试使用以下代码,但它给了我一个字符串中的所有大写字母,即使它只是一个单词的第一个字母。
SELECT title, REGEXP_REPLACE(title, '[^A-Z]+', '', 'g') AS acronym
FROM table;
这是我想要的输出:
标题 | 缩写词 |
---|---|
我会尽快离开 | 尽快 |
大卫·詹姆斯大声笑 | 哈哈 |
顺便说一句,我回家了 | 顺便说一句 |
今天请回复 | 回复邀请 |
你可以使用这个正则表达式:
regexp_replace(title, '.*?\m([[:upper:]]+)\M.*', '\1 ', 'g')
.*?
匹配任意字母是一种非贪婪的时尚\m
匹配单词的开头(
是我们感兴趣的部分的开始[[:upper:]]*
是任意多个大写字符)
是我们感兴趣的部分的结尾\M
匹配单词的结尾.*
匹配任意字符\1
引用括号内的部分你可以试试 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;
看演示在这里