提取原始电子邮件并删除电子邮件中的电子邮件别名
Posted
技术标签:
【中文标题】提取原始电子邮件并删除电子邮件中的电子邮件别名【英文标题】:Extracting original email and remove email alias in emails 【发布时间】:2021-12-23 11:02:51 【问题描述】:我正在尝试从别名中获取主要电子邮件,例如,我有以下示例,我需要对它们进行规范化。
-
从“test.me@email.com”到“testme@email.com”
从“test+me11@email.com”到“test@email.com”
从“test.me.123+22@email.com”到“testme123@email.com”
从“test+123@email.com”到“test@email.com”
我在 bigquery 上编写了一条 SQL 语句,但收到一条错误消息,提示“SUBSTR() 中的第三个参数不能为负数”
SELECT TRANSLATE(SUBSTR('test+123@email.com', 1, INSTR('test+123@email.com', '+')-1),'+.', '') ||'@' || SUBSTR('test+123@email.com', Instr('test+123@email.com','@')+1)
对上述内容的任何想法或建议或使用 regex_replace 的想法
谢谢
【问题讨论】:
在“我有以下电子邮件”之后,您会显示一个与电子邮件地址不同的列表(因为>
不是电子邮件地址中的有效字符)。请edit您提问,让我们知道您对 "A > B" 的含义,其中 A 和 B 都是有效的电子邮件地址
我编辑了这个问题,我的意思是 A>B A(包含别名的电子邮件)B(没有别名的电子邮件)
您正在更改电子邮件地址,而不是对其进行规范化。电子邮件地址“abc.def@example.com”与“abcdef@example.com”是不同的地址(不一定是它的别名)
你说得对,我应该更清楚,例如,如果是 Gmail,那么点无关紧要,如果是 gmail,我想要这项工作
【参考方案1】:
考虑以下方法
select email,
regexp_replace(email, r'([^+@]+)+?([^@]*(.*))', r'\1\3') original_email
from your_table
如果应用于您问题中的样本数据 - 输出是
如果出于某种原因您想要移除点 - 请在下方使用
select email, original_email,
format('%s@%s',
replace(split(original_email, '@')[offset(0)], '.', ''),
split(original_email, '@')[offset(1)]
) with_stripped_dots
from your_table,
unnest([regexp_replace(email, r'([^+@]+)+?([^@]*(.*))', r'\1\3')]) original_email
有输出
【讨论】:
谢谢米哈伊尔,这正是我想要的【参考方案2】:也许你可以试试正则表达式,但我不确定性能是好是坏。
select CONCAT(REGEXP_EXTRACT("test.me+123@email.com", r'([\w\.]+)'), REGEXP_EXTRACT("test.me+123@email.com", r'(@[\w\.]+)'))
【讨论】:
【参考方案3】:您似乎试图通过使用 (``) 来替换 +
和 .
字符:
TRANSLATE(SUBSTR('test+123@email.com', 1, INSTR('test+123@email.com', '+')-1),'+.', '')
这不起作用,因为使用 TRANSLATE() 的第二个和第三个参数应该具有相同的长度。
也许你想做(对于@
之前的部分):
REPLACE(REPLACE(LEFT('test+123@email.com',INSTR('test+123@email.com','@')-1),'+',''),'.','')
【讨论】:
谢谢,没错,我还需要删除加号后面的任何字符以上是关于提取原始电子邮件并删除电子邮件中的电子邮件别名的主要内容,如果未能解决你的问题,请参考以下文章
发送确认链接并单击原始电子邮件后,用新电子邮件更新用户的个人资料