我试图从下面的示例数据中提取r7080075和x1234567。格式始终是一个大写字符,后跟7位数字。此id前面还始终带有下划线。因为它是用户生成的数据,所以有时它是记录中的第一个下划线,有时前面的所有空格都被下划线替换。
我在select语句中查询hdp配置单元:
REGEXP_EXTRACT(column_name,'[(?:(^_A-Z))](\d{7})',0)
我尝试过寻址位置0-2,但没有一个返回错误或任何数据。我在regextester.com上测试了代码,它突出显示了我要提取的数据。当我在zepplin中运行它时,它返回null。
我的regex经验是有限的,所以我在这里回顾了regexp\u extract(+hive)的文章,并与一位同事进行了交谈。事先谢谢你的帮助。
样本数据:
Sept Wk 5 Sunny Sailing_R7080075_12345
Holiday_Wk2_Smiles_X1234567_ABC
1条答案
按热度按时间nue99wik1#
Hive手册上说:
请注意,在使用预定义字符类时需要注意:使用'\s'作为第二个参数将匹配字母s;'\s'是匹配空格等所必需的。
此外,表达式在character类中还包含不必要的字符。
试试这个:
由于只需要不带下划线的部分,请使用以下命令:
它匹配整个模式,但只提取第二组而不是整个匹配。
或者:
这使用了一种称为“正向lookback”的regexp技术。它的意思是:“给我找一个大写字母表,后跟7位数字,但前提是它们前面有一个∗”。它使用u进行匹配,但不认为它是提取的匹配的一部分。