使用 Nifi replaceText 将 char/string 的第一次或最后一次出现与另一个字符串交换?
Use Nifi replaceText to swap first or last occurance of char/string with another string?
正在尝试将标签添加到传入的 nifi json 流文件中。
输入:
[{"HIT":"DUMMY_3","BatchId":"jkajks981n-1280189nd-129dnbj-2349nbfk","Id":"81274376231"}]
预期输出:
[{"nifi_received_ts_est":"2018-10-04 09:31:50.108","HIT":"DUMMY_3","BatchId":"jkajks981n-1280189nd-129dnbj-2349nbfk","Id":"81274376231"}]
尝试了不同的方法,现在接近这个:
Search Value: ^([^\[]*)
Replacement Value: [{"nifi_received_ts_est":"${now():format("yyyy-MM-dd HH:mm:ss.SS")}"\,
Replacement Strategy: Regex Replace
Evaluation Mode: Entire Text
但结果不是预期的那样。低于:
[{"nifi_received_ts_est":"2018-10-04 09:31:50.108",[{"HIT":"DUMMY_3","BatchId":"jkajks981n-1280189nd-129dnbj-2349nbfk","Id":"81274376231"}]
正则表达式从来都不好... :( 有人可以帮助搜索和替换正确的短语吗?此外,如果有人可以解释正则表达式以及如何进行分组,那也会有所帮助。也许是一个很好的备忘单参考. 什么是测试和解析 nifi 特定正则表达式的好网站?
解决方案:
如果它可以帮助任何人找到该模式:搜索值:^(.*?)[{(将进行惰性搜索,直到找到第一个“[{”并将其之前的内容分组为 $1),因此替换为:$1{"nifi_received_ts_est":"${现在():格式("yyyy-MM-dd HH:mm:ss.SS")}",
我不确定你为什么要在这里使用正则表达式。正确的方法是将 JSON 字符串解码为 Perl 数据结构,将新数据添加到结构中,然后将其编码回 JSON.
#!/usr/bin/perl
use strict;
use warnings;
use feature 'say';
use JSON;
use Time::Piece;
my $json_parser = JSON->new;
my $json = '[{"HIT":"DUMMY_3","BatchId":"jkajks981n-1280189nd-129dnbj-2349nbfk","Id":"81274376231"}]';
my $data = $json_parser->decode($json);
$data->[0]->{nifi_received_ts_est} =
localtime->strftime('%Y-%m-%d %H:%M:%S');
$json = $json_parser->encode($data);
say $json;
将 search value
更改为 ^(\[\{)(.*)
在这种情况下,第一组 (\[\{)
将匹配前两个符号
和第二组(.*)
字符串的其余部分
正在尝试将标签添加到传入的 nifi json 流文件中。
输入:
[{"HIT":"DUMMY_3","BatchId":"jkajks981n-1280189nd-129dnbj-2349nbfk","Id":"81274376231"}]
预期输出:
[{"nifi_received_ts_est":"2018-10-04 09:31:50.108","HIT":"DUMMY_3","BatchId":"jkajks981n-1280189nd-129dnbj-2349nbfk","Id":"81274376231"}]
尝试了不同的方法,现在接近这个:
Search Value: ^([^\[]*)
Replacement Value: [{"nifi_received_ts_est":"${now():format("yyyy-MM-dd HH:mm:ss.SS")}"\,
Replacement Strategy: Regex Replace
Evaluation Mode: Entire Text
但结果不是预期的那样。低于:
[{"nifi_received_ts_est":"2018-10-04 09:31:50.108",[{"HIT":"DUMMY_3","BatchId":"jkajks981n-1280189nd-129dnbj-2349nbfk","Id":"81274376231"}]
正则表达式从来都不好... :( 有人可以帮助搜索和替换正确的短语吗?此外,如果有人可以解释正则表达式以及如何进行分组,那也会有所帮助。也许是一个很好的备忘单参考. 什么是测试和解析 nifi 特定正则表达式的好网站?
解决方案: 如果它可以帮助任何人找到该模式:搜索值:^(.*?)[{(将进行惰性搜索,直到找到第一个“[{”并将其之前的内容分组为 $1),因此替换为:$1{"nifi_received_ts_est":"${现在():格式("yyyy-MM-dd HH:mm:ss.SS")}",
我不确定你为什么要在这里使用正则表达式。正确的方法是将 JSON 字符串解码为 Perl 数据结构,将新数据添加到结构中,然后将其编码回 JSON.
#!/usr/bin/perl
use strict;
use warnings;
use feature 'say';
use JSON;
use Time::Piece;
my $json_parser = JSON->new;
my $json = '[{"HIT":"DUMMY_3","BatchId":"jkajks981n-1280189nd-129dnbj-2349nbfk","Id":"81274376231"}]';
my $data = $json_parser->decode($json);
$data->[0]->{nifi_received_ts_est} =
localtime->strftime('%Y-%m-%d %H:%M:%S');
$json = $json_parser->encode($data);
say $json;
将 search value
更改为 ^(\[\{)(.*)
在这种情况下,第一组 (\[\{)
将匹配前两个符号
和第二组(.*)
字符串的其余部分