ошибка при применении регулярных выражений к числовым значениям для замены значений в nifi - PullRequest
2 голосов
/ 04 июня 2019

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

[{
   s1 = 98493456645
   s2 = 0000000000
   102 = 93234,
   12 = 
   15 = rahdeshfui
   16 = 2343432,234234
  },
{
   s1 = 435234235
   s2 = 01
   102 = 45336
   12 = 
   15 = vjsfrh@gmail.com
   16 = 2415454
 }
 ]

теперь с помощью выражения reg мне нужно перейти на формат json, и я попробовал это

регулярное выражение: - ([^\s]+?.*)=((.*(?=,$))+|.*).*

заменить значение: - "$1":"$2",

для этих значений я получаю вывод, как показано ниже

[{
   "s1":"98493456645",
   "s2":"0000000000",
   "102":"93234,",
   "12":"",
   "15":"rahdeshfui",
   "16":"2343432,234234",
  },
{
   "s1":"435234235",
   "s2":"01",
   "102":"45336",
   "12":"",
   "15":"vjsfrh@gmail.com",
   "16":"2415454"
 }
 ]

, но ожидаемый результат должен быть таким, как показано ниже

[{
       "s1":98493456645,
       "s2":0,
       "102":93234,
       "12":"",
       "15":"rahdeshfui",
       "16":"2343432,234234",
      },
    {
       "s1":435234235,
       "s2":01,
       "102":45336,
       "12":"",
       "15":"vjsfrh@gmail.com",
       "16":"2415454"
     }
     ]

для числовых чисел их не должно быть в "", и если у меня есть значение больше одного 0, мне нужно заменить его на один 0, а для некоторых значений у меня есть , в конце, мне нужно пропустить , в случаеесли у меня есть один

1 Ответ

2 голосов
/ 04 июня 2019

Это может быть немного громоздко, но вы хотите заменить несколько вещей, поэтому одним из вариантов может быть использование нескольких замен.

Обратите внимание, что эти шаблоны не принимают открывающее [{ и закрывающее ]]в учетную запись или любое вложение, но только часть значения ключа в качестве шаблона проводки используется для данных примера.

1.) Оберните ключи и значения в двойные кавычки, не используя запятую вконец и соответствует знак равенства, включая окружающие пробелы:

(\S+) = (\S*?),?(?=\n) и заменить на "$1":"$2",

Демо

2.) Удалите двойные кавычки вокруг цифр, за исключением тех, которые начинаются с 0:

("[^"]+":)"(?!0+[1-9])(\d+)"" и заменены на $1$2

Демо

3.) Удалите запятую после последнего ключевого значения:

("[^"]+":)(\S+),(?!\n *"\w+") и замените на $1$2

Демо

4.) Заменить ноль 2 или более раз одним нулем:

("[^"]+":)0{2,} и заменить остроумиеh $10

Демо

Это приведет к:

[{
   "s1":98493456645,
   "s2":0,
   "102":93234,
   "12":"",
   "15":"rahdeshfui",
   "16":"2343432,234234"
  },
{
   "s1":435234235,
   "s2":"01",
   "102":45336,
   "12":"",
   "15":"vjsfrh@gmail.com",
   "16":2415454
 }
 ]

Предполагается, что последнее значение "16":"2415454" равно "16":2415454 какзначение содержит только цифры.

...