csv - Apache Nifi:使用更新记录处理器替换列中的值
问题描述
我有一个 csv,它看起来像这样:
name,code,age
Himsara,9877,12
John,9437721,16
Razor,232,45
code
我必须根据一些正则表达式替换列。我的逻辑显示在下面的 Scala 代码中。
if(str.trim.length == 9 && str.startsWith("369")){"PROB"}
else if(str.trim.length < 8){"SHORT"}
else if(str.trim.startsWith("94")){"LOCAL"}
else{"INT"}
我使用UpdateRecord
处理器来替换code
列中的数据。我添加了一个名为的属性/code
,其中包含该值。
${field.value:replaceFirst('^[0-9]{1,8}$','SHORT'):replaceFirst('[94]\w+','OFF_NET')}
这在替换代码时有效
- 长度小于 8,带有“SHORT”
- 以“本地”开头的 94
我无法找到替换列中数据的方法,
code
当它等于 8 位并且以 0 开头时。此外,如果数据不属于上述任何条件,我该如何替换数据。(数据应该被替换的情况INT
)
希望您可以建议将工作流或值添加到更新记录中的属性中,以使上述两个替换发生。
解决方案
有一个length
和startsWith
功能。
${field.value:length():lt(8):ifElse(
'SHORT', ${field.value:startsWith(94):ifElse(
'LOCAL', ${field.value:length():equals(9):and(${field.value:startsWith(369)}):ifElse(
'PROB', 'INT'
)})})}
我已经放置了换行符以便于识别功能,但它应该被删除。
顺便说一句,INT的意思是要替换一些字符串值?对困惑感到抱歉。
好吧,如果你只想正则表达式,你可以试试下面的代码。
${field.value
:replaceFirst('[0-9]{1,8}', 'SHORT')
:replaceFirst('[94]\w+', 'OFF_NET')
:replaceFirst('369[0-9]{6}', 'PROB')
:replace(${field.value}, 'INT')
}
推荐阅读
- python - Docker 网络,在执行 docker run 命令时访问 docker-compose 文件中的服务
- django - 即使使用建议的配置,Nginx 也不提供静态文件
- json - JSON 行为包代码不起作用。- 我的世界基岩
- r - 编译 R 后 R 和 RMarkdown 中缺少字体
- postgresql - Postgres中的日期减法并包括两个日期
- c# - 用列表中的每个字符串替换一个字符串
- statistics - 如何分析连续变量对二进制结果的影响?
- python - 当值的大小写无关紧要时如何比较字典?
- javascript - 将字符串转换为嵌套的 JavaScript 对象或 JSON
- java - Jersey 请求正文需要正确格式化