hive regexp\u extract返回null

lyr7nygr  于 2021-06-27  发布在  Hive
关注(0)|答案(1)|浏览(504)

对正则表达式的世界来说比较陌生,所以请耐心听我说。我试图使用regexp\u extract来提取字符串中的某个数据子集,但是对于我当前尝试使用的正则表达式,它会返回null。
要求如下:-
字符串-->测试=1233]3212]-->提取1233
字符串-->测试=123355-->123355
其思想是在test=直到字符串的第一个]或结尾时提取所有数据。
到目前为止,我试图通过hive的regexp\u提取使用的正则表达式是--> test=(.*?)]|.* ```
select regexp_extract('test=1233]','test=(.?)]|.',1);
--1233 (CORRECT)

select regexp_extract('test=1233]323]','test=(.?)]|.',1);
--1233 (CORRECT)

select regexp_extract('test=1233323abc','test=(.?)]|.',1);
--NULL (Should return 1233323abc)

谢谢你的建议。我已经走到一半了:(
e4yzc0pl

e4yzc0pl1#

你可以用

regexp_extract(col,'test=([^\\]]+)',1);

似乎用它更合适 regexp_replace 这里,因为你想得到整个输入时,没有匹配。
你可以用

regexp_replace(col, ".*?test=([0-9a-zA-Z]+).*", "$1")

查看regex演示。
正则表达式将匹配一个完整的字符串,它将删除除1个或多个字母和数字以外的所有文本 test= 将返回子字符串或整个输入。
如果能有任何字符,但是 ] ,使用

regexp_replace(col, ".*?test=([^\\]]+).*", "$1")

查看另一个regex演示。

相关问题