如何在 NiFi 表达式语言中使用正则表达式捕获组变量?

chr*_*_86 3 apache-nifi

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

ABCDE,20200619,23.8
FGHIJ,20200619,14.5
...
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用 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)}
Run Code Online (Sandbox Code Playgroud)

但我收到以下错误:

NiFi 错误

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

这是我的处理器:

NiFi 处理器

chr*_*_86 9

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

${'$1':substring(0, 4)}-${'$1':substring(4, 6)}-${'$1':substring(6, 8)}
Run Code Online (Sandbox Code Playgroud)

  • 帖子和解决方案做得很好。您应该能够接受它并给自己更多的代表积分。 (2认同)