当它们之间有标点符号或空格时,我希望将首字母缩写在一起(最多两个字母)。
我有以下代码片段可以解决几乎所有问题,但是在将首字母分隔为标点和空格时,我遇到了一些问题。例如,这适用于常规正则表达式,但不适用于postgresql:
SELECT regexp_replace('R Z ELEMENTARY SCHOOL',
'(\b[A-Za-z]{1,2}\b)\s+\W*(?=[a-zA-Z]{1,2}\b)',
'\1')
结果应该是“ RZ ELEMENTARY SCHOOL”。其他示例包括:
A & D ALTERNATIVE EDUCATION
J. & H. KNOWLEDGE DEVELOPMENT
A. - Z. EVOLUTION IN EDUCATION
转换应如下所示:
AD ALTERNATIVE EDUCATION
JH KNOWLEDGE DEVELOPMENT
AZ EVOLUTION IN EDUCATION
如何在Postgresql中实现呢?
谢谢
我建议您以当前的正则表达式为基础
SELECT REGEXP_REPLACE(
REGEXP_REPLACE('J. & H. KNOWLEDGE DEVELOPMENT', '\m([[:alpha:]]{1,2})\M\s*\W*(?=[[:alpha:]]{1,2}\M)', '\1'),
'^([[:alpha:]]+)\W+',
'\1 '
)
参见在线演示,产生
regexp_replace
1 JH KNOWLEDGE DEVELOPMENT
这是一个两步解决方案。第一个正则表达式匹配
\m([[:alpha:]]{1,2})\M
-捕获到第1组中的整个一个或两个字母单词(\m
是前导单词边界,并且\M
是尾随单词边界)\s*
-零个或多个空格\W*
-零个或多个非单词字符(?=[[:alpha:]]{1,2}\M)
-正向的前瞻,要求在当前位置的右边紧接一个或两个字母。比赛将被替换为组1(\1
)的内容。
第二个正则表达式在字符串的开头与字母单词匹配,并用空格替换所有非单词字符。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句