使用正则表达式删除尾随的中间首字母缩写



我有一个人员列表,有些人的名字带有中间的首字母,有些人只有名字。我想创建一个正则表达式,它的第一个组只匹配第一个名称。

一些例子:

  • "Ben t"->"Ben"
  • "Lisa Ann t"->"Lisa An"
  • "本"->"本"

如果我只想去掉后面的中间首字母,这对(.*)( .)这样的东西来说很容易,但我不能确定中间首字母是否总是存在。我在Postgres做这件事,以备不时之需。

试试这个:

SELECT regexp_replace('Lisa Ann t', '\s\S+$', '');

使用case和字符串操作很容易做到这一点:

select (case when firstname like '% _' then left(firstname, length(firstname) - 2)
             else firstname
         end) as firstname

最新更新