regex - 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')
但是,结果不是正则表达式结果,而是正则表达式本身。
解决方案
您可以使用
${filename:replaceAll('^(?:[^/]+/){3}([^/]+)(.*)', '$1/archive$2')}
查看正则表达式演示
细节
^
- 字符串的开始(?:[^/]+/){3}
- 三个出现的 1+ 字符/
,然后是 a/
([^/]+)
- 第 1 组 ($1
):一个或多个字符/
(.*)
- 第 2 组 ($2
):字符串的其余部分。
推荐阅读
- javascript - 使用两种协议进行电子深度链接
- ssl - 使用然后删除自签名证书 localhost
- reactjs - 使用 next-translate 和 i18n 测试组件
- kubernetes - After certificates renewal, an error: "You must be logged in to the server (Unauthorized)"
- javascript - 有没有办法使用 jquery 和 js 从项目外部更改反应事件?
- python - ubuntu 中的规范识别错误
- python - 为什么 android 上的 kivy 应用程序会生成 Swiftclient 异常(需要 python-keystoneclient)但可以在桌面(Windows)上运行?
- flutter - 如何从 html 获取整个顶部而不是顶部?
- snowflake-cloud-data-platform - 雪花复制命令以将默认值替换为 null
- nuxt.js - Nuxt.js vuex 存储未持久化