大括号中的参数在下面的代码段中做了什么?
regexp_extract(col_value, '^(?:([^,]*)\,?){1}', 1) Id,
regexp_extract(col_value, '^(?:([^,]*)\,?){2}', 1) Score,
regexp_extract(col_value, '^(?:([^,]*)\,?){9}', 1) DisplayName,
答案 0 :(得分:0)
正如您可以阅读here,大括号中包含前一个令牌(在本例中为non-capturing group)可能重复的次数。
该组包含由非逗号字符组成的(可能为空)capturing group,后跟可选的逗号。由于大括号中只有一个数字,因此非捕获组必须重复该次数。
我不知道为什么逗号应该用反斜杠转义。在我看来,反斜杠是没有必要的。
警告:我不知道Hadoop或Hive,我对regexp_extract
的所有知识都来自this page。
这些正则表达式的目的是匹配逗号分隔列表中的第一个,第二个和第九个元素,其中捕获组#1(由regexp_extract
的第三个参数选择)仅返回其最后一次出现。当然,除了最后一个元素之外,逗号不是可选的。