Как найти последовательность отформатированных цифр в Apache Nifi с помощью регулярного выражения? - PullRequest
0 голосов
/ 16 мая 2018

Я хочу найти с помощью Apache Nifi такой вид текста в формате CSV с большим количеством текста:

нннн? Пп

где n - это цифра от 0 до 9, а? буквальный знак вопроса.

Реальный пример:

8764? 23

Всегда имеет 4 цифры до ? и 2 цифры после.

Как это можно сделать?

Ответы [ 3 ]

0 голосов
/ 18 мая 2018

Это регулярное выражение, необходимое для ваших нужд.

(\d{4}\?\d\d)
0 голосов
/ 04 июня 2018

Начиная с простого:

\d{4}\?\d{2}

Но это также будет соответствовать 8764?23 в более длинной строке, такой как 98764?23 или 8764?234.

Если вам нужно найти точноесоответствует как отдельные значения в CSV, требуется более сложное регулярное выражение:

(?:^|,)\s*(\d{4}\?\d{2})\s*(?:,|$)

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

  • (?:^|,) использует синтаксис (something|something else), чтобы разрешить выбор из двух разных вещей - здесь он разрешает либо само начало строки ^, либо запятую ,.?: в начале исключает включение этого выражения в группу захвата.
  • \s* позволяет отображать любое количество пробелов (т. Е. Ноль или более пробелов, табуляции и т. Д.) Перед соответствующим выражением.
  • (\d{4}\?\d{2}) указывает ровно 4 цифры \d{4}, за которыми следует знак вопроса \? (который необходимо экранировать, чтобы отличить его от регулярного выражения ?, означающего 0 или 1 вхождение) , за которыми следуют еще 2 цифры \d{2}.Окружающие скобки () используются для указания этого в качестве группы захвата.
  • \s* допускает больше пробелов после сопоставленного выражения.
  • (?:,|$) допускает запятую , иликонец строки $ и ?: исключает это из группы захвата.

Демо

https://regex101.com/r/X0Ic4v/1

Использование

Вышеуказанное можно использовать с ExtractText от Nifi для получения первой группы захвата для каждого матча.Поскольку интерес представляет только группа захвата, а не остальная часть совпадения, для «Включить группу захвата 0» может быть задано значение false.Предположительно для обоих параметров «Включить многострочный режим» и «Включить группу повторяющегося захвата» должно быть установлено значение true.

Дополнительные соображения

В приведенном выше предположении 8764?23 выглядит точно так жеэто как значение в строке CSV.Но, может быть, вам нужно разрешить "8764?23"?Или, возможно, другие, такие как '8764?23', _8764?23_ или даже ABC8764?23DEF?Здесь слишком много возможных вариантов, один размер подходит всем, поэтому, пожалуйста, ответьте в комментариях, чтобы указать требования, если вышеперечисленное не соответствует вашим потребностям.

0 голосов
/ 17 мая 2018

Вот ваше регулярное выражение: \d\d\d\d\?\d\d и инструмент, где вы можете использовать его (а здесь более сложный версия)

...