regex - 配置单元 regexp_extract 返回 NULL

标签 regex hive hiveql regex-group

对正则表达式的世界来说相对较新,所以请多多包涵。 我正在尝试使用 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/

相关文章:

python - 具有 5 个数字或 IND/5 个数字的字符串的正则表达式

php - 警告 : preg_replace(): Unknown modifier

linux - 转义 shell 脚本中的某些字符

java - 无法连接到hive server2(SQL异常、thrift传输异常等)

hadoop - Sqoop-Hive导入

sql - hive/sql 如何检查列值的多次重复并聚合这些值或显示列范围

hadoop - 保存 Hive 查询

java - 正则表达式在 Twitter 文本文件中查找 Shorturl

ruby - gsub 如何与 '*' 、 '+' 和 '?' 一起工作

hadoop - 如何使用 INSERT-SELECT 查询加载具有复杂数据类型的 Hive 表