在 Postgresql 中处理缩写
Handle initials in Postgresql
当中间有标点符号或 space 时,我想将首字母(最多两个字母)放在一起。
我有以下代码片段可以解决几乎所有问题,但我在将由标点符号和 space 分隔的首字母放在一起时遇到了问题。例如,这适用于常规正则表达式,但不适用于 postgresql:
SELECT regexp_replace('R Z ELEMENTARY SCHOOL',
'(\b[A-Za-z]{1,2}\b)\s+\W*(?=[a-zA-Z]{1,2}\b)',
'')
结果应该是“RZ 小学”。其他示例包括:
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)', ''),
'^([[:alpha:]]+)\W+',
' '
)
见online demo,屈服
regexp_replace
1 JH KNOWLEDGE DEVELOPMENT
这是一个两步解决方案。第一个正则表达式匹配
\m([[:alpha:]]{1,2})\M
- 捕获到第 1 组的整个一两个字母的单词(\m
是前导单词边界,\M
是尾随单词边界)
\s*
- 零个或多个白色spaces
\W*
- 零个或多个非单词字符
(?=[[:alpha:]]{1,2}\M)
- 正前瞻要求紧靠当前位置右侧的一两个字母单词。
匹配项替换为第 1 组 (
) 的内容。
第二个正则表达式匹配字符串开头的字母单词,并用 space.
替换其后的所有非单词字符
当中间有标点符号或 space 时,我想将首字母(最多两个字母)放在一起。
我有以下代码片段可以解决几乎所有问题,但我在将由标点符号和 space 分隔的首字母放在一起时遇到了问题。例如,这适用于常规正则表达式,但不适用于 postgresql:
SELECT regexp_replace('R Z ELEMENTARY SCHOOL',
'(\b[A-Za-z]{1,2}\b)\s+\W*(?=[a-zA-Z]{1,2}\b)',
'')
结果应该是“RZ 小学”。其他示例包括:
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)', ''),
'^([[:alpha:]]+)\W+',
' '
)
见online demo,屈服
regexp_replace
1 JH KNOWLEDGE DEVELOPMENT
这是一个两步解决方案。第一个正则表达式匹配
\m([[:alpha:]]{1,2})\M
- 捕获到第 1 组的整个一两个字母的单词(\m
是前导单词边界,\M
是尾随单词边界)\s*
- 零个或多个白色spaces\W*
- 零个或多个非单词字符(?=[[:alpha:]]{1,2}\M)
- 正前瞻要求紧靠当前位置右侧的一两个字母单词。
匹配项替换为第 1 组 () 的内容。
第二个正则表达式匹配字符串开头的字母单词,并用 space.
替换其后的所有非单词字符