如何使用REGEXP_REPLACE从字符串中移除邮箱并保留其他文本
问题描述
我手里有个包含多个邮箱地址的字符串,想只删掉里面的邮箱,剩下的文本保留。试着用正则表达式实现,但搞不清怎么在留着其他内容的前提下精准移除邮箱。
示例字符串:
David Ram:DRAM@info.au,Seja:SEJA@info.au,Yogan:YSGAN@info.au
尝试的SQL语句:
SELECT REGEXP_REPLACE(TEXTAREA,':[a-zA-z0-9.]@[a-zA-z0-9.]*' ) FROM CONTEXT
期望输出:
David Ram,Seja,Yogan
解决方案
你的写法有两个问题:
- 正则匹配不完整:原正则只抓了
:到@的一小部分,没覆盖完整的邮箱格式,而且字符范围写错了——[a-zA-z]里的A-z会包含[、\这类无关符号,应该用[A-Za-z0-9._]来匹配邮箱的合法字符。 - 缺少替换值参数:多数数据库的
REGEXP_REPLACE需要第三个参数说明替换成什么,默认不是空字符串,得明确写''。
调整后的SQL语句:
SELECT REGEXP_REPLACE(TEXTAREA, ':[A-Za-z0-9._]+@[A-Za-z0-9._]+', '') FROM CONTEXT;
说明:
:[A-Za-z0-9._]+精准匹配冒号开头的邮箱用户名(包含字母、数字、下划线、点)@[A-Za-z0-9._]+匹配@后面的域名部分- 把这些匹配到的邮箱相关内容替换为空,就能得到你想要的纯名字结果。
内容的提问来源于stack exchange,提问作者Mani
相关产品推荐
相关产品推荐

