如何使用正则函数提取JSON关键字

步骤1:了解正则捕获函数

REGEXP_EXTRACT_NTH(表达式, 模式, 索引)

使用正则表达式模式返回给定字符串的子字符串。子字符串与第n个捕获组匹配,其中模式的每一个括号匹配一个捕获组,其中n为给定索引。

示例: REGEXP_EXTRACT_NTH("abc 123", "([a-z])+\s+(\d+)", 2) = "123"

步骤2:正则规则

提取数值:REGEXP_EXTRACT_NTH(JSON, "\"关键词\":([^},]+)", 1)

提取字符串:REGEXP_EXTRACT_NTH(JSON, "\"关键词\":\"([^},]+)\"", 1)

解释:

1.定位别名称为关键词:后的位置,使用\来进行引号的转义

2.使用特殊字符^忽略数值右侧可能出现的逗号或中括号

3.使用限定符+获取符合规则的所有内容,如果不加,只会返回符合要求的第一个字符

示例:

JOSN:{"url":"http://www.netcharles.com/orwell/essays.htm", "domain":"netcharles.com", "title":"Orwell Essays & Journalism Section - Charles' George Orwell Links", "EDC":8888, "index":2931, "time_created":1345419323, "num_saves":24}

提取字符串:

REGEXP_EXTRACT_NTH(B1, "\"url\":\"([^},]+)\"", 1)

提取数值:

REGEXP_EXTRACT_NTH(B1, "\"EDC\":([^},]+)", 1)

效果:

如何使用正则函数提取JSON关键字 - 图1

说明:部分数据源不支持类似的正则函数,比如ClickHouse,这时候我们可以用直通函数RAWSQL来调用这些自定义函数

ClickHouse数据源使用两函数区别:

如何使用正则函数提取JSON关键字 - 图2

直通函数:RAWSQL_STR("extract(%1, '\"duration\":([^},]+)')",[data])

正则函数:REGEXP_EXTRACT_NTH(data, "\"duration\":([^},]+)", 1)

关于更多直通函数说明参考:https://study.sf.163.com/documents/read/manual/CalculateFields-RAWSQL_FUNCS-00_RAWSQL_FUNC.md