ошибка при извлечении текста из данных с использованием замены текста в NIFI - PullRequest
2 голосов
/ 16 мая 2019

Привет У меня есть текстовый файл, как показано ниже

[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 ]

2 голосов
/ 17 мая 2019

Используйте следующее регулярное выражение:

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

затем заменить на

$1,$2,$3

Демо

  1. Первая группа захватывает текст между [ и ].
  2. Вторая группа пропускает все, пока не найдет первую комбинацию :", а затем захватит номер телефона.
  3. Третья группа находит следующую :" комбинацию и затем захватывает все до закрытия ".
1 голос
/ 17 мая 2019

Это выражение содержит три группы, которые можно связать запятыми и может вернуть желаемый результат:

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

Однако я не уверен в этом, если это будет работать в NIFI. Вы также можете просто добавить или уменьшить границы, если хотите.

enter image description here

RegEx

Если это не было вашим желаемым выражением, вы можете изменить / изменить выражения в regex101.com .

RegEx Circuit

Вы также можете визуализировать свои выражения в jex.im :

enter image description here

JavaScript Demo

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);
...