如何在Hive中从字符串提取完整email地址 regexp_extract正则问题
Hive提取完整邮箱正则调整方案
问题原因
你当前使用的正则@(.*)仅从@符号开始匹配,因此只能返回@及后续的域名部分,无法覆盖@前面的邮箱用户名。
正确正则规则
完整邮箱的匹配逻辑为:
- 用户名部分:可包含大小写字母、数字、下划线、小数点、中划线,至少1个字符
- 固定分隔符
@ - 域名部分:由域名前缀、小数点、顶级域名组成,域名前缀规则同用户名,顶级域名至少2位字母
适配Hive的正则写法为:[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\\.[a-zA-Z]{2,}
注意:Hive中反斜杠需要二次转义,因此匹配小数点的
\.要写为\\.
调整后SQL语句
Select regexp_extract('my email address is xxxxxx@gmail.com', '[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\\.[a-zA-Z]{2,}', 0);
执行后返回结果为:xxxxxx@gmail.com
补充说明
regexp_extract的第三个参数为0时返回整个正则匹配到的完整内容,若你后续需要单独提取邮箱用户名或域名,可将对应规则用括号包裹,修改第三个参数为对应分组序号即可。
内容的提问来源于stack exchange,提问作者Rajat Arora
相关产品推荐
相关产品推荐

