首页 > 解决方案 > 从 Hive 中的电子邮件地址中选择顶级域

问题描述

我正在尝试在电子邮件地址列中查找顶级域的长度。

我已经尝试了 regexp_replace 的几次迭代,但没有成功。

失败的尝试都围绕以下命令:

length(regexp_replace(emailaddress,'@\.(.*)',1)) --counts before '@' characters

预期输出:

emailaddress = asdfasdf@gmail.com
length = 3
emailaddress = asdfasdf@gmail.co
length = 2

标签: regexhivehiveql

解决方案


您可以使用

length(regexp_extract(emailaddress,'[.]([^.]+)$', 1))

[.]([^.]+)$则表达式将匹配一个点,然后将捕获 1 个或多个字符,而不是一个点,直到输入的末尾。该1参数将使regexp_extract 函数仅返回组 1 中捕获的子字符串,length并将返回该值的长度。

如果您的电子邮件在主机部分没有点,您可以进一步限制模式(以禁止@在否定字符类中匹配):

length(regexp_extract(emailaddress,'[.]([^@.]+)$', 1))

推荐阅读