Извлечение значений из разделенной запятой строки с помощью Regex - PullRequest
2 голосов
/ 12 июня 2019

У меня есть строка, как показано ниже:

7,TEST-31052019-02,CD12345,CD54321,Success,Deliverable Recipients

Я хочу извлечь из него два значения, используя Extract Text Processor в nifi. Один TEST-31052019-02 и CD54321.

Я попытался VF[A-Z]*-[0-9]*-[0-9]* и смог извлечь TEST-31052019-02. Как я могу извлечь CD54321 с помощью того же регулярного выражения?

VF[A-Z]*-[0-9]*-[0-9]*

Ожидаемый результат:

TEST-31052019-02, CD54321

Ответы [ 2 ]

3 голосов
/ 12 июня 2019

Вы также можете сопоставить символы 1+ в верхнем регистре и сопоставить либо шаблон с тире, либо совпадать с цифрами 1+ и использовать положительный прогноз, чтобы утверждать, что ниже следует использовать верхний и нижний регистр символов:

[A-Z]+(?:-[0-9]+-[0-9]+|[0-9]+(?=,[A-Z][a-z]))

Объяснение

  • [A-Z]+ Соответствует 1+ заглавным буквам
  • (?: Группа без захвата
    • [0-9]+-[0-9]+ Совпадение цифр и дефиса
    • | или
    • [0-9]+(?=,[A-Z][a-z]) Совпадение цифр 1+ и использование положительного взгляда, чтобы утверждать, что прямо справа находится , Прописные буквы в нижнем регистре char a-z
  • ) Закрыть группу без захвата

Regex demo

Обратите внимание, что в вашем паттерне вы используете [0-9]*-[0-9]*, но квантификатор * будет повторяться 0+ раз и может также соответствовать, например, --

3 голосов
/ 12 июня 2019

Я предполагаю, что мы хотим извлечь два значения, TEST-31052019-02

([A-Z]+-[0-9]+-[0-9]+)

и CD54321

([A-Z0-9]+),[A-Z][a-z]

который мы здесь используем ,[A-Z][a-z] в качестве правой границы рядом с этой группой захвата:

([A-Z0-9]+)

Мы можем использовать чередование, если хотим объединить их:

([A-Z0-9]+),[A-Z][a-z]|([A-Z]+-[0-9]+-[0-9]+)

Демо

RegEx Circuit

jex.im визуализирует регулярные выражения:

enter image description here

...