配置单元 regexp_extract 返回 NULL
Hive regexp_extract returning NULL
对正则表达式的世界来说相对较新,所以请多多包涵。
我正在尝试使用 regexp_extract 提取字符串中的某个数据子集,但它为我当前尝试使用的正则表达式返回 NULL。
要求如下:-
字符串 --> 测试=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]+).*", "")
参见regex demo。
正则表达式将匹配整个字符串,它会删除除 test=
子字符串之后的 1 个或多个字母和数字以外的所有文本,否则将返回整个输入。
如果可以有除 ]
之外的任何字符,请使用
regexp_replace(col, ".*?test=([^\]]+).*", "")
对正则表达式的世界来说相对较新,所以请多多包涵。 我正在尝试使用 regexp_extract 提取字符串中的某个数据子集,但它为我当前尝试使用的正则表达式返回 NULL。
要求如下:-
字符串 --> 测试=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]+).*", "")
参见regex demo。
正则表达式将匹配整个字符串,它会删除除 test=
子字符串之后的 1 个或多个字母和数字以外的所有文本,否则将返回整个输入。
如果可以有除 ]
之外的任何字符,请使用
regexp_replace(col, ".*?test=([^\]]+).*", "")