我在Hive中有一个非常简单的问题。我写了下面的摘录,它应该从字符串中返回“ 10”。当我在regexr上测试它时,它可以工作,但是在Hive中,它只是返回一个空白字段。
有人知道我在做什么错吗?
select REGEXP_EXTRACT('DOM_10GB_mth','/[0-9]*/g', 0)
答案 0 :(得分:1)
REGEXP_EXTRACT
函数期望使用正则表达式 pattern 作为第二个参数。在线正则表达式测试器中的/
字符表示正则表达式定界符,它们不属于正则表达式模式。 g
部分是一个正则表达式 flag (用于匹配字符串中某个模式的多次出现),并且它也不是该模式的一部分。您只应将字符串模式传递给Hive regex函数。
另外,要提取一个或多个数字,可以使用[0-9]+
而不是[0-9]*
,因为*
仅匹配0个或多个匹配项。
使用
select REGEXP_EXTRACT('DOM_10GB_mth','[0-9]+', 0)
请参见this regex demo。
请注意,在regexr或任何其他在线正则表达式测试器中,/[0-9]*/g
模式 would not work either。
答案 1 :(得分:0)
当我将以上内容应用于字符串“ xyca3a032975b95285c6f10c8dbde6d9”时,没有得到正确的结果。知道为什么吗?
从双对中选择regexp_extract('xyca3a032975b95285c6f10c8dbde6d9','[0-9] +',0)作为res ;;
答案 2 :(得分:0)
要获取字符串中的所有数字,您必须删除所有不是数字的内容。使用这个函数来获取它:
select REGEXP_REPLACE('DOM_10GB_mth','[^0-9]+', "")
@Wiktor_Stribiżew 的回答只会返回第一个数字序列,因此如果您尝试从“111Z222”中获取数字,它将返回“111”。我的回答会返回“111222”。