对正则表达式的世界来说相对较新,所以请多多包涵。 我正在尝试使用 regexp_extract 提取字符串中的特定数据子集,但它为我当前尝试使用的正则表达式返回 NULL。
要求如下:-
String --> test=1233]3212] --> 提取1233
字符串 --> 测试=123355 --> 123355
想法是提取 test= 之后的所有数据,直到字符串的第一个 ] 或结尾。
我现在尝试通过 Hive 的 regexp_extract 使用的正则表达式是 --> 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)
非常感谢您的建议。我现在已经完成一半了:(
最佳答案
你可以使用
regexp_extract(col,'test=([^\\]]+)',1);
似乎在这里使用 regexp_replace
更合适,因为您希望在不匹配时获得整个输入。
你可以使用
regexp_replace(col, ".*?test=([0-9a-zA-Z]+).*", "$1")
参见 regex demo .
正则表达式将匹配整个字符串,它会删除所有文本,但 test=
子字符串后的 1 个或多个字母和数字将被返回,否则将返回整个输入。
如果除了]
可以有任何字符,使用
regexp_replace(col, ".*?test=([^\\]]+).*", "$1")
参见 another regex demo .
关于regex - 配置单元 regexp_extract 返回 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53546566/