You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL中如何仅删除表情符号,保留含特殊字符的名称信息?

仅删除PostgreSQL表中表情符号、保留合法姓名字符的解决方案

你的原脚本问题出在[^a-zA-Z]这个正则上——它会把所有非基础英文字母的字符全换成空格,包括像Ö、ü这种姓名里的合法带变音符号的字符,所以才会把"Amina Öztürk"改成"Amina zt rk"。要只删表情、保留有效内容,得精准定位表情符号来替换。

给你两个实用的SQL方案:

方案1:精准匹配所有表情符号(推荐)

直接匹配Unicode定义的表情符号相关区块,替换为空字符串:

SELECT full_name,
       -- 移除各类表情符号(含肤色修饰符、国旗序列等)
       regexp_replace(full_name, '[\p{Emoji}\p{Emoji_Modifier}\p{Emoji_Component}\p{Emoji_Flag_Sequence}]', '', 'g') AS Cleansed_Name
FROM Emoji_Test;

如果替换后有多余的连续空格,可以再加一步清理:

SELECT full_name,
       trim(regexp_replace(regexp_replace(full_name, '[\p{Emoji}\p{Emoji_Modifier}\p{Emoji_Component}\p{Emoji_Flag_Sequence}]', '', 'g'), '\s+', ' ', 'g')) AS Cleansed_Name
FROM Emoji_Test;

方案2:保留姓名常用字符(兜底方案)

如果不确定表情范围,也可以反向操作——只保留Unicode字母(含所有带变音符号的字母)、空格、连字符、撇号这些姓名里常见的合法字符,其他(包括表情)全删掉:

SELECT full_name,
       regexp_replace(full_name, '[^\p{L}\s\-'']', '', 'g') AS Cleansed_Name
FROM Emoji_Test;

这里\p{L}会匹配所有语言的字母,不管有没有变音符号,完美保留像"Amina Öztürk"这类姓名。

内容的提问来源于stack exchange,提问作者Prem

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 03:15:43