任务是找到表达式中与所选正则表达式匹配的部分,并将该部分放入新字段的值中。
例如“描述”字段中的表达式:
“纬度是12324.24”
我需要从中提取“12324.24”值,并使用 UpdateRecord 处理器创建新字段:
“纬度 = 12324.24”
我正在寻找 matchesRegex。例如:
/description[matchesRegex(., '(\d+)(\.)(\d+)')]
但它只检查整个表达式是否与正则表达式匹配。例如,当“description”仅包含“12324.24”时,matchesRegex 工作正常,但该字段不仅包含纬度值。
一个重要通知: 字段值不一定像我上面显示的那样。所以它可能包括:
“12324.24 是纬度”, “12324.24这个值”, “12324.24 是 12234 的纬度”, 和其他可能的值。唯一的要求是包含纬度值(所示情况下为 12324.24)。
因此,基于文本中标记的位置(或值)的 substring、substringAfter、substringBefore 和类似方法不适合我的任务。
您正在使用“过滤器”,如文档中的“记录路径指南”中所述。
你的表情
/description[matchesRegex(., '(\d+)(\.)(\d+)')]
的意思是:
description
如果字段的值与查询不匹配,则表达式不会解析为任何字段(及其值),而是解析为
null
。
顺便说一句,您可以将此类过滤表达式同时应用于多个字段,例如想象 description
是一个包含多个值的数组,您的过滤器只能保留匹配的数组项。
您希望使用“独立函数”来转换原始输入,而不是过滤值。 以下表达式
replaceRegex(/description, '.*?(\d+.\d+).*', '$1')
:
description
替换又可以通过索引 (
$1
) 或名称 ${groupName}
来引用捕获组。
使用的
UpdateRecord
的完整配置包含:
{
"/latitude": "replaceRegex(/description, '.*?(\\d+.\\d+).*', '$1')",
"Record Writer": "d79fc7b7-872c-3fd0-8a2a-cf4ff21bfa2e",
"Record Reader": "44045758-d88e-3c93-ae9f-2173c7860a26",
"Replacement Value Strategy": "record-path-value"
}