首页 > 解决方案 > Apache Nifi - 使用 UpdateAttribute 处理器更改属性路径

问题描述

我想使用 UpdateAttribute 处理器更改 Flowfile-Attribute。

属性“文件名”是:

backup/int_backup/storage/teamname/toolname/path/bdsd9d83-dvvv8-41d9-a271-95b2284bd56c/20200420125822_11.zip

字符串的开头应该被剪切,teamname并且toolname应该是另一个文件夹,archive如下所示:

teamname/archive/toolname/path/bdsd9d83-dvvv8-41d9-a271-95b2284bd56c/20200420125822_11.zip

我创建了一个识别团队名称的正则表达式:

/[^/]*/[^/]*/([^/]*)/

还有一个在第三个“/”之后标记所有内容的正则表达式:

/[^/]*/[^/]*/[^/]*/([^*]*)

我尝试通过添加来构建字符串:

${filename:replaceAll('/[^/]*/[^/]*/([^/]*)/', '$1')}/archive/${filename:replaceAll('/[^/]*/[^/]*/[^/]*/([^*]*)', '$1')

但是,结果不是正则表达式结果,而是正则表达式本身。

标签: regexapache-nifi

解决方案


您可以使用

${filename:replaceAll('^(?:[^/]+/){3}([^/]+)(.*)', '$1/archive$2')}

查看正则表达式演示

细节

  • ^- 字符串的开始
  • (?:[^/]+/){3}- 三个出现的 1+ 字符/,然后是 a/
  • ([^/]+)- 第 1 组 ( $1):一个或多个字符/
  • (.*)- 第 2 组 ( $2):字符串的其余部分。

推荐阅读