在NIFI中使用替换文本从数据中提取文本时出错

时间:2019-05-16 09:32:41

标签: regex apache-nifi

嗨,我有一个如下的文本文件

[2019-05-13 00:00:01] local.INFO: home.index 
{"phone":"959452735778","ua":"MMDataMall/11002 CFNetwork/976 
 Darwin/18.2.0"}

现在我需要如下提取数据

2019-05-13 00:00:01,959452735778,MMDataMall/11002 CFNetwork/976 
 Darwin/18.2.0

我正在使用文本replacetext处理器,但是我得到的是空文档

我的搜索值:-(.+?)\s+:local INFO.*phone\s+(\[.*\])\s+(?=,).*ua\s+(\[.*\])\s+(?=,)$

我的替换值:-$1 ,$2,$3

replacetext屏幕截图 enter image description here

有人可以帮我吗

2 个答案:

答案 0 :(得分:2)

使用以下正则表达式:

\[(.*)\][\s\S]*\{\S+?:"(\d+)\S+:"([\s\S]*)"}

然后替换为

$1,$2,$3

Demo

  1. 第一组捕获[]之间的文本。
  2. 第二组跳过所有操作,直到找到第一个:"组合,然后捕获电话号码。
  3. 第三组找到下一个:"组合,然后捕获所有内容,直到结束"

答案 1 :(得分:1)

此表达式捕获三个组,您可以用逗号将其绑定,并可能返回所需的输出:

 \[(.*)\][\s\S]*?phone":"(.*)?","[a-z]+":"([\s\S]*?)"} 

但是我不确定它是否可以在NIFI中使用。您也可以根据需要简单地添加或减少边界。

enter image description here

RegEx

如果这不是您想要的表达式,则可以在regex101.com中修改/更改表达式。

RegEx电路

您还可以在jex.im中可视化您的表达式:

enter image description here

JavaScript演示

const regex = /\[(.*)\][\s\S]*?phone":"(.*)?","[a-z]+":"([\s\S]*?)"}/gm;
const str = `[2019-05-13 00:00:01] local.INFO: home.index 
{"phone":"959452735778","ua":"MMDataMall/11002 CFNetwork/976 
 Darwin/18.2.0"}`;
const subst = `$1,$2,$3`;

// The substituted value will be contained in the result variable
const result = str.replace(regex, subst);

console.log('Substitution result: ', result);