Postgres Regex_Replace:在Replace字符串中使用模式
要求 我的要求是检查一个人的名字是否包含首字母,用大写字母和句号替换。根据我的要求,姓名的首字母将始终是单字母名称,或名称中空格前后的单字母字符串 挑战 我正在使用REGEXP\u REPLACE并使用\y搜索单词边界内的单个字符。这很好,但现在我需要在替换字符串中使用相同的字符,使其大写并添加句点。基本上,下面查询中的$1应该替换为从模式\y[(A-Z)(A-Z)]\y中获得的字符串 样本数据Postgres Regex_Replace:在Replace字符串中使用模式,regex,postgresql,regexp-replace,Regex,Postgresql,Regexp Replace,要求 我的要求是检查一个人的名字是否包含首字母,用大写字母和句号替换。根据我的要求,姓名的首字母将始终是单字母名称,或名称中空格前后的单字母字符串 挑战 我正在使用REGEXP\u REPLACE并使用\y搜索单词边界内的单个字符。这很好,但现在我需要在替换字符串中使用相同的字符,使其大写并添加句点。基本上,下面查询中的$1应该替换为从模式\y[(A-Z)(A-Z)]\y中获得的字符串 样本数据 Below is table of sample data and code to create s
Below is table of sample data and code to create sample data
first_name Suggested value
A A.
H M H. M.
Lars E Lars E.
Jo Jo
BO Bo
X X X X. X. X.
M HAMED M. HAMED
M P Rajan M. P. Rajan
Rajan M P Rajan M. P.
下面是创建示例数据的代码
create table public.regextest( first_name varchar(100))
insert into public.regextest values ( 'A')
,('H M')
,('Lars E')
,('Jo')
,('BO')
,('X X X')
,('M HAMED')
,('M P Rajan')
,('Rajan M P')
进行替换,然后使用将每个单词的第一个字母大写
select
initcap(
regexp_replace(first_name, '\y([[:alpha:]])\y(?!\.)', '\1.','g')
)
from public.regextest
字符类与所有字母字符(包括重音字符)匹配。在它的两侧加上\y
可以确保我们只匹配一个(?!\)
是一种检查,在匹配中不使用
的情况下,检查后面是否紧跟着
,以避免重复。它被()
包围以捕获它
然后替换为捕获的字符,Postgres使用带点的\1
将结果输入到initcap
以修复大小写
.您的样本名字都没有小写。我想
larse
应该是larse.
?感谢您提供的示例数据。非常感谢,您提供的解决方案适合我!我观察到的一个问题是,当名称中已经有句点时。类似于A的东西被替换为,我们如何避免这种情况?显然,我们可以编写另一个replace语句并替换所有。。一个单身汉。“但这可能不是最好的方法。”维韦克说,这是一个很好的观察。它需要一个标签来识别
,而不使用它。
select
initcap(
regexp_replace(first_name, '\y([[:alpha:]])\y(?!\.)', '\1.','g')
)
from public.regextest