首页 > 解决方案 > 如何在 NiFi 表达式语言中使用正则表达式捕获组变量?

问题描述

我正在尝试使用 NiFi 替换所有文本文件行中的日期格式。该文件如下所示:

ABCDE,20200619,23.8
FGHIJ,20200619,14.5
...

我正在尝试使用 ReplaceText 处理器更改202006192020-06-19. 我已经制作了匹配日期()的正则表达式,(20\d{6},)并且我检查了它是否正常工作:当我写入它时$1 TESTING,Replacement value它按预期工作(单行文件看起来像ABCDE,20200619, TESTING,23.8)。

问题是当我尝试使用表达式语言和:substring函数时。这是我的代码Replacement value

${$1:substring(0, 4)}-${$1:substring(4, 6)}-${$1:substring(6, 8)}

但我收到以下错误:

NiFi 错误

看起来表达式语言无法访问我的$1变量。如何在表达式语言中访问我的 Regex Capturing Group 变量?

这是我的处理器:

NiFi 处理器

标签: apache-nifi

解决方案


我找到了答案:当尝试访问 ${...} 中的 Regex Capturing Group 时,我们需要将它与撇号一起使用,因此这样的代码有效:

${'$1':substring(0, 4)}-${'$1':substring(4, 6)}-${'$1':substring(6, 8)}

推荐阅读