regex - 从 Hive 中的电子邮件地址中选择顶级域
问题描述
我正在尝试在电子邮件地址列中查找顶级域的长度。
我已经尝试了 regexp_replace 的几次迭代,但没有成功。
失败的尝试都围绕以下命令:
length(regexp_replace(emailaddress,'@\.(.*)',1)) --counts before '@' characters
预期输出:
emailaddress = asdfasdf@gmail.com
length = 3
emailaddress = asdfasdf@gmail.co
length = 2
解决方案
您可以使用
length(regexp_extract(emailaddress,'[.]([^.]+)$', 1))
正[.]([^.]+)$
则表达式将匹配一个点,然后将捕获 1 个或多个字符,而不是一个点,直到输入的末尾。该1
参数将使regexp_extract
函数仅返回组 1 中捕获的子字符串,length
并将返回该值的长度。
如果您的电子邮件在主机部分没有点,您可以进一步限制模式(以禁止@
在否定字符类中匹配):
length(regexp_extract(emailaddress,'[.]([^@.]+)$', 1))
推荐阅读
- r - 是否可以在 R 个人库中为一个特定版本的 R 安装不同的包版本
- vbscript - 如何将所有子文件夹移动到另一个文件夹保留树?
- php - “类不存在。反射失败。” 延迟加载和对象存储
- r - R:grep 意外输出多个字符串匹配
- oracle - 在plsql中参数为空时使用
- c - 在 arm-linux 中使用 ptrace 获取寄存器
- asp.net - 扩展器不能位于与其扩展的控件不同的 UpdatePanel 中。更新面板异常
- python - 如何使用 seaborn 或 plotly 绘制时间序列图?
- excel - 比较两个字段并根据它生成结果
- c++ - 我无法从 mingw 开始使用 gdb 进行调试