regex - Hive REGEXP_EXTRACT 返回空结果
问题描述
我正在尝试从下面的示例数据中提取 R7080075 和 X1234567。格式始终为单个大写字符后跟 7 位数字。此 ID 也始终以下划线开头。由于它是用户生成的数据,因此有时它是记录中的第一个下划线,有时前面的所有空格都已替换为下划线。
我在 select 语句中用这个查询 HDP Hive:
REGEXP_EXTRACT(column_name,'[(?:(^_A-Z))](\d{7})',0)
我已经尝试解决位置 0-2 并且没有返回错误或任何数据。我在 regextester.com 上测试了代码,它突出显示了我要提取的数据。然后当我在 Zepplin 中运行它时,它返回 NULL。
我的正则表达式经验有限,因此我在此处查看了有关 regexp_extract (+hive) 的文章并与一位同事交谈。在此先感谢您的帮助。
样本数据:
Sept Wk 5 Sunny Sailing_R7080075_12345
Holiday_Wk2_Smiles_X1234567_ABC
解决方案
Hive 手册是这样说的:
请注意,在使用预定义的字符类时需要注意:使用 '\s' 作为第二个参数将匹配字母 s;'\\s' 是匹配空格等所必需的。
此外,您的表达式在字符类中包含不必要的字符。
尝试这个:
REGEXP_EXTRACT(column_name,'_[A-Z](\\d{7})',0)
由于您只想要没有下划线的部分,因此请使用:
REGEXP_EXTRACT(column_name,'_([A-Z]\\d{7})',1)
它匹配整个模式,但只提取第二组而不是整个匹配。
或者:
REGEXP_EXTRACT(column_name,'(?<=_)[A-Z]\\d{7}', 0)
这使用了一种称为“正向后看”的正则表达式技术。它翻译为:“给我找一个大写字母后跟 7 位数字,但前提是它们前面有一个 _”。它使用 _ 进行匹配,但不将其视为提取匹配的一部分。
推荐阅读
- python - 通过使用 python 跳过空白单元格来读取包含 url 的列/列表
- r - Windows 和 Linux 上 R markdown 的 html 输出大小差异很大
- git - GitAhead 不断询问用户名和密码
- nuxt.js - Nuxt SSR 设置导致 Tailwind 媒体查询崩溃
- python - 在python的文本文件中退格一个字符串
- reactjs - reactjs:提供到公共文件夹的文件在生产构建中解析为 404 错误,但在开发中使用 npm start
- html - 如何使用jQuery关闭该元素的点击之外的元素?
- python - 理解这个 kivy 程序的确切错误告诉我的问题
- linux - RAD SERVER 10.4.1 “E2597(SystemPath)\ld-linux.exe: 错误: 找不到 -lz” 部署到 Linux 64
- python - 我正在尝试在 Python 中运行这个程序,但我无法执行 def